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