【发布时间】:2012-09-05 11:51:04
【问题描述】:
在一个函数中,我正在处理一个有时可能已损坏的对象,在运行时,我能否以某种方式确定我的对象是否已损坏?
【问题讨论】:
标签: objective-c xcode debugging
在一个函数中,我正在处理一个有时可能已损坏的对象,在运行时,我能否以某种方式确定我的对象是否已损坏?
【问题讨论】:
标签: objective-c xcode debugging
真正做到这一点的唯一方法是利用称为__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 设置为 nil)。
我还告诫不要使用仅基于__weak 变量的设计模式,尤其是在您制作框架的情况下。没有什么比将 iOS 5 用作目标部署更能说明“烦人”了。
我希望这篇文章能帮助您更深入地了解弱引用的工作原理,如果没有,您可以在此处阅读一篇出色的维基百科文章:
【讨论】:
简短的回答,不,没有办法判断您的对象是否已被释放。更多解释,请查看this question。
【讨论】:
__weak 变量。
假设该对象是NSObject,只需在 Instruments 中启用 Zombies。然后你所要做的就是向有问题的对象发送消息。当您向它发送消息时,它会通知您该对象是否已死亡。
【讨论】: