在既有类中使用关联对象存放自定义数据--Effective笔记

需求:对一个现有类里或系统类里添加属性
一般会先想到分类,但是分类只支持方法,添加属性会报错,这是可以使用关联对象

关联对象是指某个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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容