iOS之Runtime运行时

2016-07-18  本文已影响33人  皮特儿

objc_method:{1.sel name    2.IMP 实现该函数的指针}

objc_ivar:{1.成员变量结构体}

objc_category:{1.分类结构体}

objc_property:{1.属性结构体}

objc_class:

1.isa指针:指明class的类型

2.superclass:父类,根类时,可以为空

3.ivars:成员变量的链表

4.cache:方法缓存

5.protocols:协议的链表

6.methodList:方法定义的链表

objc_object与id:id是指向objc_object的一个指针

objc_cache:

1.mask:缓存的总数

2.occupied:实际占用的总数

3.buckets:method指针的数组

[[TestClass alloc] init]->运行时会被编译为:objc_msgSend("TestClass", "alloc")......

runtime常见用于:字典转模型、方法的交换、动态添加属性、微信实现需要的功能(抢红包)

class执行一个函数:先从cache中查找有没有这个函数,有就直接拿出来使用;否则,从methodList中遍历查找,找到了就拿出来执行,并添加到cache缓存中,然后返回;否则再递归从superclass从查询,直到找到为止;当superclass为空时还没有找到方法,就会报出常见的错误:unrecognized selector sent to instance iphone

上一篇下一篇

猜你喜欢

热点阅读