【问题标题】:Is it required to set outlets variables to nil in dealloc (even after IOS 3.0)?是否需要在 dealloc 中将 outlets 变量设置为 nil(即使在 IOS 3.0 之后)?
【发布时间】: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


    【解决方案1】:

    不,您不需要在dealloc 中将您的出口设置为零。只要确保你释放它们。

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2010-12-13
      • 1970-01-01
      • 2011-09-01
      • 2011-10-10
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多