3

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

4

3 回答 3

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.
}

但是,通常来说,您不会保留对对象的强引用和弱引用,因为这会导致_weakRef无用(只需检查您何时设置objectnil)。

我还告诫不要使用仅基于__weak变量的设计模式,尤其是在您制作框架的情况下。没有什么比将 iOS 5 用作目标部署更能说明“烦人”的了。

我希望这篇文章能帮助你更深入地了解弱引用是如何工作的,如果没有,你可以在这里阅读一篇很棒的维基百科文章:

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

于 2012-09-05T12:08:33.827 回答
0

假设该对象是NSObject,只需在 Instruments 中启用 Zombies。然后你所要做的就是向有问题的对象发送消息。当您向它发送消息时,它将让您知道该对象是否已死亡。

于 2012-09-05T12:12:14.663 回答
0

简短的回答,不,没有办法判断您的对象是否已被释放。有关更多解释,请查看此问题

于 2012-09-05T11:56:37.930 回答