我为什么要做[对象释放];对象=无;解除分配对象时?

时间:2011-09-15 15:57:02

标签: iphone ios ios4 dealloc memory-management

我想理解为什么这样做会很有用(假设先前已经分配了“对象”):

[object release]; 
object=nil;

求助,

的Stephane

3 个答案:

答案 0 :(得分:5)

即使您释放了一个对象,您的变量仍然会指向某个东西。它指出的是未定义的。它仍然可以指向旧对象,或者指向内存中的某个点。将其设置为nil可以避免向它指向的任何内容发送消息,并防止出现错误(消息传递无效)。

以下是一个更好地说明问题的答案:Setting pointers to nil, objective-c

答案 1 :(得分:1)

这主要与多线程有关,如果另一个线程试图访问您释放的对象并设置为nil它不会崩溃。您可以向nil对象发送消息,它将不执行任何操作。

但如果它刚刚被释放,那么您正在向已解除分配的对象发送消息,您的应用程序将崩溃。

这是很好的阅读材料:

如果你投票,请告诉我们原因。

答案 2 :(得分:1)

如果您刚刚发布它,object仍将指向之前的内存地址。如果您将其检查为nil(object == nil),则会返回NO。最好在发布后确保它指向nil