我正在阅读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
所有保留的对象,只有其中一些,这实际上是导致我混淆的原因。
干杯
答案 0 :(得分:4)
在self.myProperty = nil
之后,您无法[myProperty release]
甚至dealloc
。知道为什么? 因为self
不再存在。
至于您的问题,dealloc
中的版本似乎是不必要的,但在dealloc
方法中清理实例变量仍然是一种很好的做法。
修改强>
正如Peter在评论中指出的那样,如果-main
方法永远不会执行,那么在-dealloc
中使用发布语句是必要的;没有他们,你就会泄露记忆。