【发布时间】:2011-04-14 04:27:46
【问题描述】:
在苹果的 Memory Management> 文档中谈到奥特莱斯时。
上面写着
在您的自定义视图控制器类中 你可以实现 viewDidUnload 到 调用你的访问器方法来设置 网点为零。
我可以理解,因为在这种情况下调用访问器方法设置 nil 将释放对象并将指针设置为 nil 可以防止访问可能导致崩溃的无效点。
但在那之后,它说:
注意:在 3.0 之前的 iOS 上, viewDidUnload 方法不可用。 相反,您应该将 outlets 设置为 nil 在 setView: 中,如图所示 示例:
- (void)setView:(UIView *)aView { if (!aView) { // View is being set to nil. // Set outlets to nil, e.g. self.anOutlet = nil; } // Invoke super's implementation last. [super setView:aView]; }另外,由于一个细节 中dealloc的实现 UIViewController,你也应该设置 在 dealloc 中将变量输出为零:
- (void)dealloc { // Release outlets and set outlet variables to nil. [anOutlet release], anOutlet = nil; [super dealloc]; }
1) 为什么即使在 dealloc 中我们也需要设置 nil? (我认为dealloc是对象生命周期的最后一步,没有其他人可以通过这个对象访问出口。)
2)iOS 3.0 或更高版本还需要设置 nil 吗?(我发现 Xcode 自动生成的代码不会将 nil 设置为出口变量,只释放它们。)
【问题讨论】:
标签: objective-c dealloc iboutlet