RunTime 入门

Posted Jenaral

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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索引代表的变量取出变量指向做返回值。

以上是关于RunTime 入门的主要内容,如果未能解决你的问题,请参考以下文章

Go语言入门13(runtime包)

Golang入门到项目实战 golang并发编程之runtime包

ElasticsearchElasticsearch:Runtime fields 入门, Elastic 的 schema on read 实现 - 7.11 发布

runtime engine VM的一些随想

runtime engine VM的一些随想

Go语言自学系列 | golang并发编程之runtime包