在一个函数中,我正在处理一个有时可能已损坏的对象,在运行时,我能否以某种方式确定我的对象是否已损坏?
问问题
1974 次
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
无用(只需检查您何时设置object
为nil
)。
我还告诫不要使用仅基于__weak
变量的设计模式,尤其是在您制作框架的情况下。没有什么比将 iOS 5 用作目标部署更能说明“烦人”的了。
我希望这篇文章能帮助你更深入地了解弱引用是如何工作的,如果没有,你可以在这里阅读一篇很棒的维基百科文章:
于 2012-09-05T12:08:33.827 回答
0
假设该对象是NSObject
,只需在 Instruments 中启用 Zombies。然后你所要做的就是向有问题的对象发送消息。当您向它发送消息时,它将让您知道该对象是否已死亡。
于 2012-09-05T12:12:14.663 回答
0
简短的回答,不,没有办法判断您的对象是否已被释放。有关更多解释,请查看此问题。
于 2012-09-05T11:56:37.930 回答