Category

作者: 六月的某一个早晨 | 来源:发表于2019-05-24 16:36 被阅读0次
    • Category的实现原理:
      Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息,在程序运行时,才会将数据合并到类信息中。
      category的底层结构.png
    • 以方法列表为例,首先根据分类数量将方法列表数组进行扩容,将原来的方法列表数据放到后面,再将分类的数据拷贝到原来方法列表的位置,所以同样的方法会优先调用分类的方法。


      Category的加载处理过程.png
    • Category和Class Extension的区别是什么?
      Class Extension在编译的时候,它的数据就已经包含在类信息中
      Category是在运行时,才会将数据合并到类信息中(类对象、元类对象中)
    • 在类与分类中调用+ (void)load方法,不是通过消息机制,去类对象中通过isa找到元类对象,遍历类方法列表查找,而是直接通过load方法在内存中的地址进行调用的,不存在分类的load方法覆盖类的方法。


      load方法.png
      +initialize方法.png

    相关文章

      网友评论

          本文标题:Category

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