之间有什么区别
self.myObject = nil;
和
[myObject release];
另外,为什么前者通常在viewDidUnload方法中使用,后者在dealloc方法中使用?
答案 0 :(得分:8)
假设retain
属性,那么:
self.myObject = nil;
将释放对象并将属性的值设置为nil
。它也将通过setter方法执行此操作,可能会触发KVO通知。这个:
[myObject release];
只会 释放该对象,并在属性中留下一个悬空指针。
后者通常在-dealloc
中使用,因为在释放对象后您不关心变量的值,也因为您不希望从正在销毁的对象触发KVO通知。前者几乎被其他所有地方使用。
答案 1 :(得分:1)
约翰的回答是正确的。基本上没有必要为dealloc
中的任何变量设置任何值,因为对象是垃圾回收的。我认为可以想出卸载视图的情况,但仍会调用某些方法。在这种情况下,将局部变量设置为nil
是安全的,以便能够发送消息而不是崩溃。
前一段时间,Jeff LaMarche写了一篇关于“nill or nill to nill”的博客post。看看,特别是在最后一节。