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

时间:2011-05-22 22:59:55

标签: iphone objective-c ios memory-management

之间有什么区别
self.myObject = nil;

[myObject release];

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

2 个答案:

答案 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。看看,特别是在最后一节。