设置属性是否与释放属性相同?

有什么区别

self.myObject = nil; 

 [myObject release]; 

另外,为什么前者通常在viewDidUnload方法中使用,后者在dealloc方法中使用?

假设retain属性,那么:

 self.myObject = nil; 

将释放对象并将属性的值设置为nil 。 它也将通过setter方法执行此操作,可能会触发KVO通知。 和这个:

 [myObject release]; 

只会释放对象,在属性中留下悬空指针。

后者通常在-dealloc使用,因为在取消分配对象后您不关心变量的值,还因为您不希望从正在销毁的对象触发KVO通知。 前者几乎用于其他任何地方。

约翰的回答是正确的。 基本上没有必要为dealloc中的任何变量设置任何值,因为对象是垃圾收集的。 我认为可以想出卸载视图的情况,但仍会调用某些方法。 在这种情况下,将局部变量设置为nil是安全的,以便能够发送消息而不是崩溃。

前一段时间,Jeff LaMarche发表了一篇关于“无论是否为无”的博客文章 。 看看,特别是在最后一节。