4

我已经看到了一些可以调用的Apple示例,[super viewDidUnload];而有些则没有。我读了一篇文章(几个月前,所以我不记得网址了)说调用[super viewDidUnload];是不必要的,但除此之外没有解释。

是否有明确的理由为什么或为什么不告诉 super viewDidUnload
而且,(如果应该这样做)我是否在将所有属性设置为nil、 之后或是否重要之前调用 super ?

- (void)viewDidUnload {
    // Is this necessary?
    // [super viewDidUnload];

    self.tableDataSource = nil;
    self.titleLabel = nil;

    // Is it better to call super before or after nil'ing properties?
    // [super viewDidUnload];
}

谢谢!

4

2 回答 2

7

1-是否有明确的理由为什么或为什么不告诉super viewDidUnload?

老实说,我不知道不打电话的后果。您可以尝试不调用它并且一切正常,但是想象一下 Apple 添加了一些重要的代码,当[super viewDidUnload]被调用时会运行,现在会发生什么?不好的事情可能会发生,你会花费宝贵的时间来解决你的问题。我的规则是:覆盖时,调用超级。

2 - 在将我的所有属性设置为 nil 之前,我是否调用 super ,之后,还是有关系?

super dealloc]确实很重要,当我在释放我的对象之前调用 [ 时,我已经看到了不好的事情发生。就像我看到我的 UI 很慢一样,因为我之前做过计算[super viewDidLoad]。它始终取决于您想要实现的目标。

最重要的是,我在项目中所做的viewDidUnload是:

//释放我的观点

[超级 viewDidUnload];

至于iOS6:

该方法已被弃用

于 2011-10-11T18:11:28.543 回答
2

viewDidUnload就像dealloc您正在“关闭”您的对象 - 您正在释放内存并将其置于(半)非活动状态。

Cocoa 中推荐的模式是[super dealloc]在子类的末尾执行,dealloc因为您需要确保您添加到类中的所有内容都可以在您的实例因被释放而失效之前被释放。同样的想法,虽然它可能不是一个问题,但适用于viewDidUnload.

一般来说,在创建的时候,先让超类工作。破坏时,让它持续工作。

[super deconstructionMethod] 如果超类的实现什么都不做,您不需要发送。认为viewDidUnload对于.

于 2011-10-11T18:11:41.813 回答