2011-01-08 20 views
0

我读了LazyTableImages code,苹果已经发布了和他们做了这种效果(在子类的NSOperation)后释放他们这样做如果是dealloc在将属性设置为零之前调用iPhone的内存管理:</p> <pre><code>- (void)dealloc { [myProperty release]; [myProperty2 release]; } - (void)main { // // Parse operation undertaken here // self.myProperty = nil; self.myProperty2 = nil; } </code></pre> <p>我的想法是:设置self.someProperty =零

我的想法在这里正确吗? 是否不需要发布,因为self.myProperty = nil有效发布myProperty

我在这段代码中注意到的一件事是,他们没有release所有保留对象在dealloc,只有其中一些,这真是我的困惑的原因。

干杯

+1

不要忘记发送'[super dealloc]`。如果你不这样做,你会泄漏物体。 – 2011-01-08 23:24:48

回答

4

你不能这样做self.myProperty = nildealloc后甚至[myProperty release]。知道为什么? 因为self已不存在。

至于你的问题,似乎dealloc中的版本是不必要的,但在你的dealloc方法中清理实例变量仍然是一个好习惯。

编辑

正如彼得在评论中指出,如果从未执行-main方法,然后有在-dealloc发布声明是必要的;没有他们,你会泄漏记忆。

+3

如果`main`永远不会被调用(例如,如果这个操作从未被排入队列),或者任何一个或两个属性都改变为在`main`返回之后再次指向对象,``dealloc` * (即操作结束后)。我会转到另一端:它不需要`main`中的属性。 – 2011-01-08 23:27:29

相关问题