associatedValueForKey,无法识别的密钥

时间:2012-09-12 00:37:07

标签: objective-c automatic-ref-counting nsobject objective-c-runtime

如果我没有使用'objc_setAssociatedObject'将对象/键关联到NSObject,然后我调用'objc_getAssociatedObject',这样安全吗?

我在模拟器中测试了它并没有崩溃,但我想确定。

当我打电话时:

 objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);

当我的NSObject被dealloc'd时,我与NSObject关联的对象是否会被释放? (我正在使用ARC)。

1 个答案:

答案 0 :(得分:4)

如果没有关联,objc_getAssociatedObject将返回nil

关联对象时,它将使用最后一个参数中提供的语义。例如,OBJC_ASSOCIATION_RETAIN将保留对象,因此只要关联就位,它就不会被释放。

当持有关联的对象(objc_setAssociatedObject的第一个参数)deallocs时,它将破坏关联。当关联被破坏时,保留的对象将被释放(如果它被保留以开始)。

所以,举个例子:

objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);
在关联被破坏之前,

value将被保留。当self deallocs或与另一个objc_setAssociatedObject更改关联时,关联将被破坏。