如何确定我是否有指向已发布对象的指针?

use*_*313 3 debugging xcode objective-c

在一个函数中,我正在处理一个可能有时被破坏的对象,在运行时,我可以以某种方式确定我的对象是否已损坏?

Ric*_*III 6

真正做到这一点的唯一方法是利用ARC(和iOS 5,在此之前不起作用)的新东西称为__weak指针.

还应注意__weak,根据定义,变量不会保留.如果一个__weak变量保留了它的目标,那么按照定义,它就无法自行释放.

基本上,__weak指针是一个变量,它自动将其自身设置NULL为取消分配时.因此,您可以执行以下操作来确定对象是否已取消分配:

__strong id object; // required so that the object doesn't get deallocated right away
__weak id _weakRef;

object = [NSObject new];
_weakRef = object;

// do stuff with 'object'

if (_weakRef)
{
    // 'object' hasn't been deallocated yet, do something with it.
}
Run Code Online (Sandbox Code Playgroud)

通常来讲,你没有守住一强一弱引用的对象,但是,因为这会导致_weakRef是无用的(只检查,当你设置objectnil).

我还要提醒自己不要只使用基于__weak变量的设计模式,特别是如果你正在制作一个框架.没有什么比使用iOS 5作为目标部署更令人讨厌了.

我希望这篇文章能帮助您更深入地了解弱引用的工作原理,如果没有,可以在这里阅读一篇优秀的维基百科文章:

http://en.wikipedia.org/wiki/Weak_reference