如果我使用使用objc_setAssociatedObject
的类别向对象添加伪属性,我该如何确保它们被正确释放?我是否必须在dealloc
?
答案 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值 明确协会。