Effective Objective-C 2.0 第10条:在既有类中使用关联对象存放自定义数据

有时需要在对象中存放相关信息,OC中有一种强大的特性可以解决此类问题,就是“关联对象”。
可以给某个对象关联许多其他对象,这些对象通过“键”来区分。存储对象值时,可以指明“存储策略”,用以维护相应地“内存管理语义”。存储策略由名为 “objc_AssociationPolicy” 的枚举所定义。

OBJC_ASSOCIATION_ASSIGN -> assign
OBJC_ASSOCIATION_RETAIN_NONATOMIC -> nonatomic,retain
OBJC_ASSOCIATION_COPY_NONATOMIC -> nonatomic,copy
OBJC_ASSOCIATION_RETAIN -> retain
OBJC_ASSOCIATION_COPY -> copy

下列方法可以管理关联对象:

void objc_setAssociatedObject(id ojbect, void* key, id value, objc_AssociationPolicy policy)
此方法以给定的键和策略为某对象设置关联对象值。
id objc_getAssociatedObject(id object, void *key)
此方法根据给定的键从某对象中获取对应的对象值。
void objc_removeAssociatedObjects(id object)
此方法移除指定对象的全部关联对象。

操作像NSDictionary,但是二者之间重要差别:设置关联对象时用的键是个“不透明指针”。如果两个键上调用“isEqual:”方法的返回值是YES,对于关联对象值时,若想令两个键匹配到同一个值,则二者必须是完全相同的指针才行。在设置关联对象值时,通常使用静态全局变量做值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值