时间:2011-07-01 23:47:23

标签: iphone objective-c sdk

我了解内存管理规则,如果我遵守这些规则,就不需要我提出要求。但是,我想知道是否有办法知道实例是否已经解除分配而不抛出异常。 我的应用程序使用一个对象,我的应用程序上的任何视图都可以成为其委托。有时,我得到这个众所周知的错误。我可以通过在当前委托所有者的dealloc方法上将委托设置为nil来避免这种情况。 总结...我有什么方法可以知道对象是否已被释放?

感谢。

3 个答案:

答案 0 :(得分:3)

我可以判断指针现在是否指向垃圾?

不,不是真的。取消分配对象后,可以随时重复使用其内存。有时它实际上会指向垃圾(导致崩溃),有时它会指向一个不同的Obj-C对象,有时内存也不会被重用。

主要的例外是,如果你设置环境变量NSZombieEnabled=YES(在Xcode 4中的某个地方的“edit scheme”中),对象使用的内存永远不会被释放(除非你也设置NSDeallocateZombies=YES , 或者);相反,向僵尸发送消息将导致异常。它对调试很有用,主要是因为它告诉你已经解除分配的实例的类名。

答案 1 :(得分:1)

一旦底层对象被释放,我通常会尝试设置指向nil的指针。在这种情况下,您只需检查指针是否为nil,以查看对象是否已被释放。这并非总是可行,但往往是。

答案 2 :(得分:0)

你的问题的答案毫无疑问是“不”。您无法询问指针是否有效而不会因为无效指针访问而导致崩溃。好消息是将委托对象设置为nil是正确的事情,所以你目前做的很好。