首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么/什么时候我们要打电话给super.ViewDidLoad?

为什么/什么时候我们要打电话给super.ViewDidLoad?
EN

Stack Overflow用户
提问于 2016-10-20 10:22:19
回答 6查看 21.3K关注 0票数 65

每个人都告诉我“使用super.viewDidLoad()是因为它就是那样的”或者“我一直都是这样做的,所以保持它”,“如果你不调用超级的话就错了”等等。

代码语言:javascript
运行
复制
override func viewDidLoad() {
    super.viewDidLoad()
    // other stuff goes here
}

我只发现了一些关于Objective案例的话题,它们并不是那么有启发性,但是我正在开发Swift 3,所以有任何专家能给我一个很好的详细解释吗?

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-10-20 10:45:25

通常,调用super所有没有返回值的函数是个好主意。

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

从UIViewController子类继承时也是如此。

即使打电话给super.viewDidLoad什么也不做,总是打电话是一个很好的习惯。如果你养成了不叫它的习惯,你可能会忘记在需要的时候叫它。例如,当从第三方框架或您自己的代码库对依赖它的ViewController进行子类时。

以这个人为的例子为例:

代码语言:javascript
运行
复制
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中做任何事情,就不要实现它。无论如何,超级方法都会被调用。

票数 56
EN

Stack Overflow用户

发布于 2018-08-23 23:37:26

我有一个秘密,当我在苹果工作时,我读了UIKit的源代码,部分原因是为了回答我这样的问题,viewDidLoad在所有UI*ViewController类中都是空的。

当然,我不在那里了,他们可能已经改变了这一切。

票数 33
EN

Stack Overflow用户

发布于 2017-07-31 11:19:00

首先,我认为调用super.viewDidLoad()是一个很好的实践。

在iOS中通常的做法是在超类完成它需要做的设置(初始化属性、布局等等)之后完成所有子类设置。如果在开始更改之前不给超类一个处理其所有设置的机会,那么您可能会遇到一些奇怪的bug和行为。

我们可以绘制一个与类初始化并行的代码:“指定的初始化程序必须在为继承的属性分配值之前委托给超类初始化程序。”我们这样做是为了确保所有超类属性都有一个值,基于这个事实,我们可以通过子类中的继承来安全地使用它们。

经验法则:

  • 初始化/设置时,首先运行超类的实现。
  • 当拆卸/清理时,最后运行超类的实现。

假设viewDidLoad()是某种类型的初始化,我们应该首先调用super.viewDidLoad()来正确地设置超类中的内容.

如果我们检查viewDidLoad()在UIViewController基类中的实现,我们可以看到它是空的。因此,从您的子类调用super.viewDidLoad()的唯一原因可能是一种良好的编码风格:-)让我们遵循它!

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40151723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档