美文网首页
iOS 分类实现原理源码分析

iOS 分类实现原理源码分析

作者: Good_Citizen | 来源:发表于2019-11-21 10:24 被阅读0次

每个分类在编译后会生成一个category_t结构体,该结构体中存储着分类的实例方法、类方法、协议列表、属性等信息

当我们运行app时runtime运行时机制会将每个分类加到对应的类对象和元类对象里面,而且加入的时候将分类列表的数据倒序取出来,然后将里面的方法列表直接插入到rw_t的前面,之前原有的方法则挪到了最后面,这也就是为什么分类的方法(相同的方法)会优先被调用,之前说到将分类列表中的数据取出来是通过倒序,这样就说明了后编译的分类,优先被调用

class_rw_t与class_ro_t的区别:class_ro_t存储着类对象/元类原有的信息(方法、属性、协议等),也就是编译后就生成的数据(通过源码可以看出是调用realizeClass之前),class_rw_t存储着class_ro_t加上分类的信息,这里的数据可以修改,是运行时才创建的数据(调用realizeClass之后),而且平时调用方法都是从class_rw_t中查找的

分类和类扩展的区别:

        类扩展是在编译完成后会存储在class_ro_t中,而分类在编译完成后只是一个个独立的category_t结构体,在运行时才会创建class_rw_t,并且将class_ro_t的数据拷贝到class_rw_t中,分类的数据也会存储在class_rw_t中

相关文章

网友评论

      本文标题:iOS 分类实现原理源码分析

      本文链接:https://www.haomeiwen.com/subject/uujbictx.html