在一个函数中,我正在处理一个可能有时被破坏的对象,在运行时,我能否以某种方式判断我的对象是否已损坏?
答案 0 :(得分:6)
真正做到这一点的唯一方法是利用一个名为__weak
指针的ARC(以及iOS 5,在此之前不起作用)的新功能。
还应该注意,根据定义,__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
设置为{{1}时进行检查})。
我还要提醒我们不要只使用基于nil
变量的设计模式,特别是如果你正在制作一个框架。没有什么比使用iOS 5作为目标部署更令人讨厌了。
我希望这篇文章能帮助您更深入地了解弱引用的工作原理,如果没有,可以在这里阅读一篇优秀的维基百科文章:
答案 1 :(得分:0)
简短的回答,不,没有办法判断你的对象是否已被解除分配。有关详细说明,请查看this question。
答案 2 :(得分:0)
假设该对象是NSObject
,只需启用乐器中的Zombies即可。然后,您所要做的就是向相关对象发送消息。当您发送消息时,它会告诉您对象是否已经死亡。