我看到一些 Apple 示例会调用[super viewDidUnload];
而另一些则不会。我读了一篇文章(几个月前,所以我不记得那个网址),说调用[super viewDidUnload];
是不必要的,但除此之外没有解释。
是否有明确的理由为什么或为什么不告诉超级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];
}
谢谢!
答案 0 :(得分:7)
1-是否有明确的理由为什么或者为什么不告诉超级的viewDidUnload?
老实说,我不知道不叫它的后果。您可以尝试不调用它,一切顺利,但想象一下,Apple会添加一些重要的代码片段,这些代码将在调用[super viewDidUnload]
时运行,现在会发生什么?可能会发生不好的事情,你会花费宝贵的时间来解决你的问题。我的规则是:当覆盖时,请打电话给超级。
2 - 在将我的所有属性设置为nil,之后,或者它是否重要之前,我是否会调用super?
重要的是,我在发布对象之前调用[super dealloc]
时发生了不好的事情。同样地,我看到我的UI很慢,因为我在[super viewDidLoad]
之前进行了计算。它总是取决于你想要达到的目标。
一句话,我在viewDidUnload
的项目中所做的是:
//发布我的观点
[super viewDidUnload];
至于iOS6:
答案 1 :(得分:2)
viewDidUnload
就像dealloc
一样,你正在“关闭”你的对象 - 你释放内存并将其置于(半)非活动状态。
Cocoa中推荐的模式是在你的子类[super dealloc]
的末尾做dealloc
,因为你需要确保你添加到类中的所有东西都可以在你的实例之前释放被释放自己无效。同样的想法虽然可能不是一个问题,但却适用于viewDidUnload
。
通常,在创建时,让超类首先工作。在摧毁时,让它最后工作。
您不需要发送[super deconstructionMethod]
iff 超类的实现什么都不做。我认为viewDidUnload
就是这种情况,但我不确定,这表明正确的方向:超类对你来说是不透明的,所以除非它记录它的实现什么都不做,你应该总是打电话。