当前位置: 首页 > 面试题库 >

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

尉迟轶
2023-03-14
问题内容

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

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

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

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


问题答案:

通常,最好为您覆盖的所有没有返回值的函数调用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方法。



 类似资料:
  • 问题内容: 调用声明为的Java方法时,JVM运行时必须执行哪些常规步骤? HotSpot 1.8.0 JVM如何实现JNI函数调用?涉及哪些检查步骤(例如,返回后未处理的异常?),JVM要执行哪些簿记操作(例如,本地引用注册表?),并且在调用本机Java方法之后控件将移至何处?如果有人可以提供本机HotSpot 1.8.0代码的入口点或重要方法,我也将不胜感激。 免责声明:我知道我自己可以阅读代

  • 问题内容: 为什么必须调用以迭代字典中的键,值对?即。 为什么不遍历字典的默认行为 问题答案: 对于每个python容器C,期望是 会顺利通过-如果一种感觉(循环子句)与另一种感觉(存在检查)完全不同, 您 会不会感到惊讶?我一定会的!它自然适用于列表,集合,元组,… 因此,当是一个字典时,如果要循环生成键/值元组,则根据最小惊讶的原理,还必须在容纳检查中采用这样的元组作为其左侧操作数。 那会有用

  • 问题内容: 我创建了一个用于显示工具提示的指令: 对应功能: 应用于此: 这是我观点的一部分,由拥有者的控制器处理 为什么必须调用才能将更改应用到,该更改是早先声明和初始化的? 问题答案: 因为附加到事件的回调超出了angular的范围;angular不知道该函数何时运行/结束,因此摘要循环永远不会运行。 调用或告诉angular更新绑定并触发任何手表。

  • 问题内容: 我正在尝试写入,但是,直到我致电,实际上才发送任何数据。即使我设置为false,也仍然不会发送。有人知道为什么吗?API文档中没有任何内容对此进行描述。 URLConnection上的Java API文档:http : //download.oracle.com/javase/6/docs/api/java/net/URLConnection.html Java的关于读取和写入URLC

  • 问题内容: 结合使用带有ReactJS的ES5开发,可以将组件描述如下: 在此的示例引用对象本身,这是预期的自然行为。 题 我的问题是: 如何使用ES6创建组件? 知道在JavaScript中使用new运算符时会引用实例化对象本身,因此有人可以告诉我使用bind的真正目的是什么?这和React的内部机制有关吗? 问题答案: 只是核心javascript。这是绑定事件的工作方式。这不是一个React

  • 问题内容: 我知道我可以使用serialVersionUID来控制类的版本。我读到我可以添加或删除字段,并且该类仍将兼容,它将仅使用默认值。 什么时候 必须 更改serialVersionUID? 问题答案: 当对类的结构进行不兼容的更改时,最好更改serialVersionUID字段的值。Java对象序列化规范中列出了不兼容更改的完整列表。 为了进一步扩展,对类的不兼容更改将阻止反序列化机制创建