在UIViewController's documentation中,Apple建议在执行viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear等的某个时刻调用super。例如,关于viewDidDisappear的讨论是:
您可以覆盖此方法以执行其他相关任务 解雇或隐藏视图。如果您覆盖此方法,则为您 必须在您的实施中的某个时刻调用超级。
我的问题是何时调用super方法,如果是,那么调用它的正确时间是什么?超级应该被称为方法的第一行,最后一行,还是中间的某个位置,具体取决于您的特定需求?
答案 0 :(得分:7)
首先在viewDidAppear
致电super
,以便您的电话会被覆盖。
在viewWillDisappear
中,它似乎是一个折腾,我已经广泛研究过,无法找到确凿的答案,似乎是50/50。我决定在我的代码中最后一次致电super
,方式与super
中最后一次调用dealloc
的方式相同。
答案 1 :(得分:2)
对于UIViewController
的视图生命周期方法,我想说没有确定何时呼叫super
的灵丹妙药规则,您应该意识到,有时您必须调用它,而不管它是在方法的开头还是结尾。例如,引自viewDidDisappear(_:)
:
您可以重写此方法以执行其他关联的任务 取消或隐藏视图。如果您覆盖此方法,则您 必须在实现的某个时刻调用超级。
但是,通常,我们通常在与初始化,设置或配置有关的方法中,一开始就调用super
方法。另一方面,我们通常在与反初始化相关的方法或类似方法的最后调用super
方法。
以下是XCTestCase
类的调用方法的示例:
override func setUp() {
super.setUp()
// do the setups, such as creating the mock objects...
}
override func tearDown() {
// make your objects no be nil for the next test...
super.tearDown()
}
因此(作为另一个示例),涉及到viewWillAppear
和viewDidDisappear
方法:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// my code...
}
override func viewDidDisappear(_ animated: Bool) {
// my code
super.viewDidDisappear(animated)
}
答案 2 :(得分:1)
我通常会在我的实施中首先调用它们。在大多数情况下,它应该无关紧要。