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