【发布时间】:2011-08-30 18:55:17
【问题描述】:
有什么区别
self.myObject = nil;
和
[myObject release];
还有,为什么viewDidUnload方法一般用前者,dealloc方法用后者?
【问题讨论】:
标签: iphone objective-c ios memory-management
有什么区别
self.myObject = nil;
和
[myObject release];
还有,为什么viewDidUnload方法一般用前者,dealloc方法用后者?
【问题讨论】:
标签: iphone objective-c ios memory-management
约翰的回答是正确的。基本上不需要为dealloc 中的任何变量设置任何值,因为该对象正在被垃圾收集。我认为可以提出一种情况,即视图被卸载,但仍然会调用一些方法。在这种情况下,将局部变量设置为nil 是安全的,以便能够发送消息而不会崩溃。
前段时间,Jeff LaMarche 有一个博客 post,内容是“to nill or not to nill”。看一看,尤其是最后一节。
【讨论】:
假设一个retain 属性,那么这个:
self.myObject = nil;
将释放对象并将属性的值设置为nil。它还将通过 setter 方法执行此操作,可能会触发 KVO 通知。还有这个:
[myObject release];
只会释放对象,在属性中留下一个悬空指针。
后者通常在-dealloc 中使用,因为在对象被释放后您不关心变量的值,并且还因为您不想从正在被销毁的对象触发 KVO 通知。前者几乎在其他任何地方都使用。
【讨论】: