category的实现原理

作者: T_guo | 来源:发表于2019-10-24 14:34 被阅读0次

    1.底层原理

    原理是将category方法数据和协议数据等各种数据放在一个叫category的结构体里面,将来将这个结构体里的方法列表拷贝到我们类对象的方法列表里去。

    2.category为什么只能添加方法和属性不能添加成员变量

    • 运行时的设计机制来看,我们从分类底层的结构体里可以看出,它不存在成员变量这个数据结构,底层语法决定了他不能添加成员变量。
    • 成员变量将来是存放在实例对象里面的,很多成员变量的布局是在编译那一刻就已经确定好了,而分类是通过运行时机制加载的,所以各种机制决定了它不能添加成员变量。

    3.category类能否添加成员变量?如果可以如何给category添加成员变量?

    • 分类里面添加属性,只会帮你声明set方法和get方法的声明,不会帮你实现。。
    • 不能直接给category添加成员变量(分类的底层结构里没有存放成员变量的的数组),但是可以间实现category有成员变量的效果。如下实现:
      关联象
      obj_setAssociated
      Objectobj_getAssociated
      Objectobj_removeAssociatedObject
      实现关联对象技术的核心对象有
      AssociationsManager,
      AssociationsHasMap,
      AssociationsMap,
      Association
      关联对象的原理:关联对象并不是存储在被关联对象本身内存中,关联对象存储在全局统一的一个AssociationsManager中,设置关联对象为nil,就相当于移除关联对象
    image.png

    相关文章

      网友评论

        本文标题:category的实现原理

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