RunTime 入门

这是一篇浅显实用 易记 易理解的关于runtime的解读。

Runtime 中的方法主要以五个单词开头——class(类)、object(实例)、method(方法)、propert(属性)、ivar(成员变量)

它们代表了方法的操作对象,如class开头的

OBJC_EXPORT Ivar *class_copyIvarList(Class cls, unsigned int *outCount)

__OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

这个方法很吓人,有很多单词,一看脑子就疼,但大部分单词不是我们关心的,只提取中间一段

class_copyIvarList   这是一个方法名,它以class开头,说明它与class有关(class是类,objc是实例)

而在class(类)里我们可以得到什么呢,没有被实例化的话好像什么也不是。其实不是这样的。class是一个模版,属性、方法、成员变量的信息我们都可以从中获取。

我们再多分析一点

class_copyIvarList(Class cls, unsigned int *outCount)  这里列出了它需要的参数,一个class类和一个无符号的int类地址。

Ivar *class_copyIvarList(Class cls, unsigned int *outCount)方法前是它的返回类型,一个ivar类型。ivar类型是class类型成员变量的信息索引,而不是载体。例如我们可以这样获得成员变量名

const char* name = ivar_getName(ivar);

可以这样获得成员变量指向

id ivarContent = object_getIvar(self, ivar);

可以看到这都不是从ivar中直接取出来的,而是通过ivar用其他办法获得的。

这里我们又用到两个不同单词开头的方法 ——ivar、object。可以看到ivar开头的方法是用来取变量名字的,而object开头的方法接受了两个值——实例和变量索引(ivar类型),它从实例中拿出ivar索引代表的变量取出变量指向做返回值。

时间: 2024-11-06 18:36:24

RunTime 入门的相关文章

iOS开发笔试面试- runtime的原理(一)

首先先说一个简书作者的博客,把runtime入门讲得够清晰. http://www.jianshu.com/p/25a319aee33d Objective-C语言使用了面向对象特性和消息转发机制. 一:Runtime的数据结构: 解析:Root class其实就是NSObject,NSObject是没有超类的,所以Root class 的superclass指向nil: 每一个Class都有一个isa指针指向唯一的Meta class: Root class(meta)的superclass指

iOS仿喜马拉雅FM做的毕业设计及总结(含新手福利源码)

其实仿喜马拉雅FM很早就开始了,从我刚接触iOS开始,就开始仿做了一部分,眼尖的人都从我的github找到了那个项目.随着找到实习iOS工作,仿写就落下了,但唯一的收获就是给过去打了一个响亮的耳光,因为刚入门没注意一些变量的命名,看着以前的view1,view2,button1,button2有一股想哭的冲动. 项目的缺陷很多,除了命名垃圾之外,还有项目框架的搭建也很垃圾,项目目录结构还算清晰,但在 Finder 中的目录结构就惨不忍睹了.如果不习惯的可以使用synx使工程目录和Finder目录

iOS开发那些事儿(一)热补丁

一.热补丁作用:修复导致崩溃的错误.替换/增加方法.替换原来的界面等等 二.实现手段:JSPatch (使用Objective-C Objective-C和JavaScript jspatch桥.你可以调用任何Objective-C类和方法在JavaScript中的只是其中一小发动机.这使应用程序获取脚本语言的力量:添加模块或更换Objective-C代码来修复漏洞动态).传送门:https://github.com/agelessman/JSPatch 三.Demo: JSPatch导入:拷贝

Java入门——Runtime类

Java入门——Runtime类 认识Runtime类 Runtime类表示运行时的操作类,是一个封装了JVM进程的类,每一个JVM都对应一个Runtime类的实例,此实例由JVM运行时为其实例化.取得Runtime类实例的方法为: Runtime run=Runtime.getRuntime(): 可以通过Runtime实例取得系统的一些信息 package Sep26; public class RuntimeDemo01 { public static void main(String[]

iOS 开发-- Runtime 1小时入门教程

1小时让你知道什么是Objective-C Runtime,并对它有一定的基本了解,可以在开发过程中运用自如. 三.Objective-C Runtime到底是什么东西? 简而言之,Objective-C Runtime是一个将C语言转化为面向对象语言的扩展. 我们将C++和Objective进行对比,虽然C++和Objective-C都是在C的基础上加入面向对象的特性扩充而成的程序设计语言,但二者实现 的机制差异很大.C++是基于静态类型,而Objective-C是基于动态运行时类型.也就是说

《图说VR入门》——DK2入门及其资源汇总

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53174895 作者:cartzhang 本来想先介绍国产的deepoon头盔的VR入门. 可能会有人疑惑,这TM不都一样么? 对啊,正是有一样,才有不一样,也就是有一样的地方,也有不同之处. 大部分都是可通用Oculus,那就先说Dk2,然后有空在介绍与Dk2不同的地方. 本篇图说目标,OC安装及其与Unity版本直接的搭配

crosswalk 快速入门,利用WebRTC(html)开始开发视频通话

crosswalk 快速入门,利用WebRTC(html)开始开发视频通话 安装Python 从http://www.python.org/downloads/ 下载安装程序 安装完后,再添加到环境变量. 安装Oracle JDK 下载页面: http://www.oracle.com/technetwork/java/javase/downloads/ 选择要下载的Java版本(推荐Java 7). 选择一个JDK下载并接受许可协议. 一旦下载,运行安装程序. 安装Ant Ant:下载http

CUDA从入门到精通

CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追求速度的应用来说无疑是一个理想的选择.还有不到一年毕业,怕是毕业后这些技术也就随毕业而去,准备这个暑假开辟一个CUDA专栏,从入门到精通,步步为营,顺便分享设计的一些经验教训,希望能给学习CUDA的童鞋提供一定指导.个人能力所及,错误难免,欢迎讨论. PS:申请专栏好像需要先发原创帖超过15篇...

(转载)Java多线程入门理解

转载出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池(Java并发编程与技术内幕:线程池深入理解),或者看这个专栏:Java并发编程与技术内幕.你将会对Java里头的高并发场景下的线程有更加深刻的理解. 目录(?)[-] 一扩展javalangThread类 二实现javalan