Q: 分类可以添加成员变量吗
分类不可以直接添加成员变量
,但是可以间接添加
在类中声明一个属性
的时候,编译器会帮我们完成两件事:
生成_属性
的成员变量
声明并实现set
方法和get
方法
而分类中声明一个属性
的时候,他只会帮我们做一件事,就是声明属性的set
方法和get
方法
如图:
所以我们需要手动地实现
set
和get方法
,这里就用到了runtime
的对象关联
API
objc_setAssociatedObject
:给某个对象绑定关联对象
参数:
object
: 需要关联的某个对象
key
:为一个指针即可,这里可以使用一个 &key
,或者@selector(属性)
value
:需要关联的对象
policy
:关联策略,可选为一个枚举,对应属性的assign
、copy
、strong
等即可
objc_getAssociatedObject
:获取某个对象所关联的key的对象
参数:
object
: 需要获取关联的某个对象
key
:为一个指针即可,这里可以使用一个 &key
,或者@selector(属性)
objc_removeAssociatedObjects
:移除某个对象的所有关联对象
参数:
object
: 需要移除的某个对象
示例: