如果你在 viewDidUnload 中设置了一个属性为 nil,你需要在 dealloc 中再次释放它吗?
最佳答案
没有,但是:
- 您不需要检查这种情况。
[nil release]
没问题。 - 你不能指望调用
viewDidUnload
。
所以只需在 -dealloc
中正常释放即可。
当然,你必须确定你确实释放了之前的对象。 如果您使用了合成 setter,您将隐式执行此操作:
self.myProperty = nil; // good
// or
[self setMyProperty:nil]; // also good
但是将 ivar 设置为 nil 会泄漏:
self->myProperty = nil; // leaky as a sieve
// or
myProperty = nil; // as useful as a screen door on a submarine
这些是常见错误。
另请注意,在 -dealloc
中将属性设置为 nil 不是一个好主意。正如 Kendall 在评论中指出的那样,您可能会意外调用 KVO 行为。在 Properties in dealloc: release then set to nil? or simply release 有更全面的讨论.
关于iphone - 使用 viewDidUnload 在 iPhone 上进行内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3490495/