【发布时间】:2012-01-10 15:54:06
【问题描述】:
Mike Ash has written this introduction to ARC 他介绍了如下内容:
__weak Foo *_weakFoo = [object foo];
我为什么要对本地临时变量执行此操作? __weak 是一个归零引用,一旦引用的对象被释放,它将自动将 _weakFoo 指针设置为 nil。此外,__weak 仅在 iOS >= 5 中可用。
当我这样做时,我什么时候会遇到麻烦?:
Foo *_weakFoo = [object foo];
这总是期望返回一个对象或零。我的猜测是这样的:
Foo *_weakFoo = [object foo];
[self doSomethingStupid]; // does something bad so foo gets deallocated
[_weakFoo doIt]; // CRASH! msg sent to deallocated instance 0x123456
ARC 仍然困扰我的一件事是:它什么时候知道我不再需要一个对象?我会争辩说,当我将指针设置为 nil 或其他内容时,它会发现此所有者不再需要先前引用的对象,因此可能会消失。但关键是:我将它设置为 nil。所以无论如何它都是零!
那么 __weak 对于局部变量什么时候有意义,我必须在其他地方做什么疯狂的事情才能真正需要它?
【问题讨论】:
标签: ios iphone xcode automatic-ref-counting weak-references