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

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

作者: 夜者无念 | 来源:发表于2017-04-29 09:55 被阅读5次

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

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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/gykzzttx.html