需求:对一个现有类里或系统类里添加属性
一般会先想到分类,但是分类只支持方法,添加属性会报错,这是可以使用关联对象
关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上。属于runtime范畴
runtime提供給我们的方法:
//关联对象
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
//获取关联的对象
id objc_getAssociatedObject(id object, const void *key)
//移除关联的对象
void objc_removeAssociatedObjects(id object)
变量说明:
id object:被关联的对象
const void *key:关联的key,要求唯一(静态全局变量做key,因为这个key是不透明指针,因此当对比对象想还要求指针相同)
id value:关联的对象
objc_AssociationPolicy policy:内存管理的策略
1,可以通过“关联对象”机制来把两个对象连起来
2,定义关联对象时可指定内存管理语义,用以模仿定义属性时所采用的“拥有关系”与“非拥有关系”
3,只有在其他做法不可行时才应选用关联对象,因为这种做法通常会引入难于查找的bug。