你什么时候在viewWillAppear,viewDidDisappear等中调用super方法?

时间:2011-09-30 18:58:40

标签: iphone ios cocoa-touch ipad

UIViewController's documentation中,Apple建议在执行viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear等的某个时刻调用super。例如,关于viewDidDisappear的讨论是:

  

您可以覆盖此方法以执行其他相关任务   解雇或隐藏视图。如果您覆盖此方法,则为您   必须在您的实施中的某个时刻调用超级

我的问题是何时调用super方法,如果是,那么调用它的正确时间是什么?超级应该被称为方法的第一行,最后一行,还是中间的某个位置,具体取决于您的特定需求?

3 个答案:

答案 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()
}

因此(作为另一个示例),涉及到viewWillAppearviewDidDisappear方法:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // my code...
}

override func viewDidDisappear(_ animated: Bool) {
    // my code
    super.viewDidDisappear(animated)
}

答案 2 :(得分:1)

我通常会在我的实施中首先调用它们。在大多数情况下,它应该无关紧要。