1

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

我已经在模拟器中测试过它并没有崩溃,但我想确定一下。

当我打电话时:

 objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);

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

4

1 回答 1

4

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

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

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

因此,对于您的示例:

objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);

value将被保留,直到关联被破坏。当self解除分配或与另一个关联更改时,关联将被破坏objc_setAssociatedObject

于 2012-09-12T03:01:43.997 回答