iPhone内存管理:设置self.someProperty = nil后的一个版本

时间:2011-01-08 22:21:37

标签: iphone cocoa ios memory-management nsoperation

我正在阅读Apple发布的LazyTableImages code,他们为此做了一些事情(在NSOperation子类中):

- (void)dealloc {
    [myProperty release];
    [myProperty2 release];
}

- (void)main {
    //
    // Parse operation undertaken here
    //
    self.myProperty = nil;
    self.myProperty2 = nil;
}

我的想法是,他们执行此操作 以防 dealloc 在将属性设置为nil 之前调用。

我的想法是否正确? 是否需要免费发布,因为self.myProperty = nil会有效释放myProperty

我在这段代码中注意到的一件事是,他们release中没有dealloc所有保留的对象,只有其中一些,这实际上是导致我混淆的原因。

干杯

1 个答案:

答案 0 :(得分:4)

self.myProperty = nil之后,您无法[myProperty release]甚至dealloc。知道为什么? 因为self不再存在。

至于您的问题,dealloc中的版本似乎是不必要的,但在dealloc方法中清理实例变量仍然是一种很好的做法。

修改

正如Peter在评论中指出的那样,如果-main方法永远不会执行,那么在-dealloc中使用发布语句是必要的;没有他们,你就会泄露记忆。