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

时间:2012-09-05 11:51:05

标签: objective-c xcode debugging

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

3 个答案:

答案 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作为目标部署更令人讨厌了。

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

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

答案 1 :(得分:0)

简短的回答,不,没有办法判断你的对象是否已被解除分配。有关详细说明,请查看this question

答案 2 :(得分:0)

假设该对象是NSObject,只需启用乐器中的Zombies即可。然后,您所要做的就是向相关对象发送消息。当您发送消息时,它会告诉您对象是否已经死亡。