IMP 的查找 过程

objc_msgSend 会根据方法选标 SEL 在类结构的方法列表中查找方法实现IMP。这里头有一些文章,咱们在前面的类结构中也看到有一个叫objc_cache *cache 的成员,这个缓存为提升效率而存在的。每一个类都有一个独立的缓存,同时包括继承的方法和在该类中定义的方法。。缓存

查找IMP 时:函数

1,首先去该类的方法 cache 中查找,若是找到了就返回它;spa

2,若是没有找到,就去该类的方法列表中查找。若是在该类的方法列表中找到了,则将 IMP 返回,并将它加入cache中缓存起来。根据最近使用原则,这个方法再次调用的可能性很大,缓存起来能够节省下次调用再次查找的开销。3,3,若是在该类的方法列表中没找到对应的 IMP,在经过该类结构中的 super_class指针在其父类结构的方法列表中去查找,直到在某个父类的方法列表中找到对应的IMP,返回它,并加入cache中。指针

4,若是在自身以及全部父类的方法列表中都没有找到对应的 IMP,则进入下文中要讲的消息转发流程。orm

便利函数:对象

咱们能够经过NSObject的一些方法获取运行时信息或动态执行一些消息:继承

class 返回对象的类;it

isKindOfClass 和 isMemberOfClass检查对象是否在指定的类继承体系中;form

respondsToSelector 检查对象可否相应指定的消息;class

conformsToProtocol 检查对象是否实现了指定协议类的方法;

methodForSelector 返回指定方法实现的地址。

performSelector:withObject 执行SEL 所指代的方法。

相关文章
相关标签/搜索