作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 LazyTableImages code Apple 已经发布并且他们为此做了一些事情(在 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
?
我在这段代码中注意到的一件事是它们不会释放
dealloc
中的所有保留对象,只有其中一些,这确实是我的原因困惑。
干杯
最佳答案
在 dealloc
之后,您不能执行 self.myProperty = nil
甚至 [myProperty release]
。知道为什么? 因为 self
不存在了。
至于你的问题,看来 dealloc
中的释放是不必要的,但在你的 dealloc
方法中清理你的实例变量仍然是一个好习惯。
编辑
正如 Peter 在评论中指出的那样,如果从未执行过 -main
方法,那么在 -dealloc
中有释放语句是必要的;没有它们,你就会泄漏内存。
关于iPhone 内存管理 : a release after setting self. someProperty = nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4636485/
我是一名优秀的程序员,十分优秀!