__weak在这种情况下做了什么

时间:2014-02-18 23:44:41

标签: objective-c

Class __weak *variable = preExistingObjectWithStrongReference;

如果调用上面的代码,然后新指针'variable'指向具有强引用的对象,并为其分配__weak属性...

这只是意味着引用计数保持不变吗?或者它是否意味着原始对象现在不再被强引用?

2 个答案:

答案 0 :(得分:1)

  

__ weak指定不使引用对象保持活动状态的引用。当没有强弱时,弱引用设置为nil   对象的引用。

这意味着只要对同一对象有任何其他强引用,就可以安全地使用变量。在某种意义上,您可以将其视为“引用计数保持不变”,如您所说。

答案 1 :(得分:1)

既不;这意味着只要其他人强烈指向,编译器就会使引用保持活动状态。如果没有更多强引用,并且引用您的weak指针的所有对象都消失了,则该对象将被释放。通常,您只对您不拥有的对象使用weak。如果你拥有它们(即它属于“属于”类),那么strong是更好的选择。 weak本质上是一个未保留的属性,除了取消分配对象时,弱指针自动设置为nil。