1.底层原理
原理是将category方法数据和协议数据等各种数据放在一个叫category的结构体里面,将来将这个结构体里的方法列表拷贝到我们类对象的方法列表里去。
2.category为什么只能添加方法和属性不能添加成员变量
- 运行时的设计机制来看,我们从分类底层的结构体里可以看出,它不存在成员变量这个数据结构,底层语法决定了他不能添加成员变量。
- 成员变量将来是存放在实例对象里面的,很多成员变量的布局是在编译那一刻就已经确定好了,而分类是通过运行时机制加载的,所以各种机制决定了它不能添加成员变量。
3.category类能否添加成员变量?如果可以如何给category添加成员变量?
image.png
- 分类里面添加属性,只会帮你声明set方法和get方法的声明,不会帮你实现。。
- 不能直接给category添加成员变量(分类的底层结构里没有存放成员变量的的数组),但是可以间实现category有成员变量的效果。如下实现:
关联象
obj_setAssociated
Objectobj_getAssociated
Objectobj_removeAssociatedObject
实现关联对象技术的核心对象有
AssociationsManager,
AssociationsHasMap,
AssociationsMap,
Association
关联对象的原理:关联对象并不是存储在被关联对象本身内存中,关联对象存储在全局统一的一个AssociationsManager中,设置关联对象为nil,就相当于移除关联对象
网友评论