如果我没有使用'objc_setAssociatedObject'将对象/键关联到NSObject,然后我调用'objc_getAssociatedObject',这样安全吗?
我在模拟器中测试了它并没有崩溃,但我想确定。
当我打电话时:
objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);
当我的NSObject被dealloc'd时,我与NSObject关联的对象是否会被释放? (我正在使用ARC)。
答案 0 :(得分:4)
如果没有关联,objc_getAssociatedObject
将返回nil
。
关联对象时,它将使用最后一个参数中提供的语义。例如,OBJC_ASSOCIATION_RETAIN
将保留对象,因此只要关联就位,它就不会被释放。
当持有关联的对象(objc_setAssociatedObject
的第一个参数)deallocs时,它将破坏关联。当关联被破坏时,保留的对象将被释放(如果它被保留以开始)。
所以,举个例子:
objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);
在关联被破坏之前, value
将被保留。当self
deallocs或与另一个objc_setAssociatedObject
更改关联时,关联将被破坏。