iOS底层day5 - 探索对象关联

2018-09-19  本文已影响0人  宁夏灼雪__

Q: 分类可以添加成员变量吗

分类不可以直接添加成员变量,但是可以间接添加
在类中声明一个属性的时候,编译器会帮我们完成两件事:
生成_属性的成员变量
声明并实现set方法和get方法
而分类中声明一个属性的时候,他只会帮我们做一件事,就是声明属性的set方法和get方法
如图:

8F1FFEEC-F2D3-4798-B411-A71266A4FE63.png
所以我们需要手动地实现setget方法,这里就用到了runtime对象关联

API

objc_setAssociatedObject :给某个对象绑定关联对象

参数:
object : 需要关联的某个对象
key :为一个指针即可,这里可以使用一个 &key,或者@selector(属性)
value :需要关联的对象
policy:关联策略,可选为一个枚举,对应属性的assigncopystrong等即可

objc_getAssociatedObject :获取某个对象所关联的key的对象

参数:
object : 需要获取关联的某个对象
key :为一个指针即可,这里可以使用一个 &key,或者@selector(属性)

objc_removeAssociatedObjects :移除某个对象的所有关联对象

参数:
object : 需要移除的某个对象

示例:


3D75E5FF-BFA9-45B6-B411-533DB436D3DE.png
E78E32A6-66B6-4664-A036-01200E7D1A46.png
上一篇下一篇

猜你喜欢

热点阅读