一尘不染

为什么/何时必须调用super.ViewDidLoad?

swift

每个人都告诉我“使用super.viewDidLoad()因为它就是这样”或“我一直那样做,所以要保留它”,“如果不叫super就是错误的”等。

override func viewDidLoad() {
    super.viewDidLoad()
    // other stuff goes here
}

我只发现了一些有关Objective-C用例的主题,这些主题并没有那么启发性,但是我正在Swift
3中进行开发,所以有什么专家可以给我一个很好的详细解释吗?

这是一种良好实践的案例还是有任何隐藏的影响?


阅读 415

收藏
2020-07-07

共1个答案

一尘不染

通常,最好为您覆盖的所有没有返回值的函数调用super。

您不知道的实现viewDidLoad。UIViewController可能在那里做了一些重要的设置工作,不调用它就不会给它运行自己的viewDidLoad代码的机会。

从UIViewController子类继承时,也会发生同样的事情。

即使打电话super.viewDidLoad没有做任何事情,也要经常打电话来养成良好的习惯。如果您习惯于不调用它,则可能会在需要时忘记调用它。例如,当从第3方框架或您自己的代码库继承依赖于它的ViewController的子类时。

举这个人为的例子:

class PrintingViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("view has loaded")
    }
}

class UserViewController: PrintingViewController {
    override func viewDidLoad() {
    super.viewDidLoad()

     // do view setup here
    }

}

在这里不调用viewDidLoad永远不会给PrintingViewController它运行自己的viewDidLoad代码的机会

如果您不想做任何事情,viewDidLoad那就不要实施它。无论如何都将调用super方法。

2020-07-07