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