函数的调用本质其实就是消息机制,一个对象调用方法其实就是objc_mgs(对象,对象的方法)。对象的方法是存在类对象中的,对象中有一个isa指针,通过isa指针可以找到其类对象。然后在类对象中找到这个对象方法。
我们要清楚下面一点:每个类只有一个类对象,不管这个类有没有分类,所以分类中的对象方法会存在类对象中。
分类中的对象方法和类方法最终会合并到类中,分类中的对象方法合并到类的类对象中,分类中的类方法合并到类的元类对象中,这个合并是在什么时候发生的呢,答案是在运行期进行的合并。
总结:
1.通过runtime加载某个类的所有Category数据。
2.把所有Category的方法,属性,协议数据合并到一个大数组中,后面参与斌编译的Category数据,会在数组的前面。
3.将合并后的分类数据(方法,属性,协议),插入到类原来数据的前面。
大牛剖析-传送门:放出原文文章,看的不是很懂,对我来说有点偏底层了,大写的尴尬...