如何释放通过objc_setAssociatedObject关联的对象?

时间:2012-02-14 15:25:13

标签: objective-c

如果我使用使用objc_setAssociatedObject的类别向对象添加伪属性,我该如何确保它们被正确释放?我是否必须在dealloc

中手动释放它们

2 个答案:

答案 0 :(得分:17)

您指定的行为决定了该类型的内存管理方式。如果选择保留或复制,则在您添加相关引用的类的实例被释放时将释放该对象。这使得保留和复制行为操作成为Objective-C类的首选。只要在完成对象时将引用设置为nil,Assign也可以避免保留周期。

  

常数

   OBJC_ASSOCIATION_ASSIGN 指定对的弱引用   相关对象。

   OBJC_ASSOCIATION_RETAIN_NONATOMIC 指定一个   对关联对象的强引用,以及关联   不是原子地做的。

   OBJC_ASSOCIATION_COPY_NONATOMIC 指定   复制关联的对象,并且不进行关联   原子。

   OBJC_ASSOCIATION_RETAIN 指定对其的强引用   关联对象,以及原子关联。

   OBJC_ASSOCIATION_COPY 指定复制关联对象,   而这种关联是以原子方式进行的。

答案 1 :(得分:3)

虽然你回答了自己的问题,但是,由于你没有包含文档文本本身,并且你链接到的页面不再可用,这里是为了方便其他人:

来自Apple的Objective-C运行时参考

  

void objc_removeAssociatedObjects(id object)

     

删除给定对象的所有关联。

     

这个功能的主要目的是让它容易返回   反对“原始状态”。你不应该使用这个功能   一般从对象中删除关联,因为它也会删除   其他客户可能已添加到对象的关联。   通常,您应该使用objc_setAssociatedObject并使用nil值   明确协会。