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 所指代的方法。