每个人都告诉我“使用super.viewDidLoad()是因为它就是那样的”或者“我一直都是这样做的,所以保持它”,“如果你不调用超级的话就错了”等等。
override func viewDidLoad() {
super.viewDidLoad()
// other stuff goes here
}
我只发现了一些关于Objective案例的话题,它们并不是那么有启发性,但是我正在开发Swift 3,所以有任何专家能给我一个很好的详细解释吗?
这是一个良好的实践案例,还是有任何隐藏的影响?
发布于 2016-10-20 10:45:25
通常,调用super所有没有返回值的函数是个好主意。
您不知道viewDidLoad
的实现。UIViewController可能正在做一些重要的设置,而不调用它不会给它运行自己的viewDidLoad
代码的机会。
从UIViewController子类继承时也是如此。
即使打电话给super.viewDidLoad
什么也不做,总是打电话是一个很好的习惯。如果你养成了不叫它的习惯,你可能会忘记在需要的时候叫它。例如,当从第三方框架或您自己的代码库对依赖它的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
中做任何事情,就不要实现它。无论如何,超级方法都会被调用。
发布于 2018-08-23 23:37:26
我有一个秘密,当我在苹果工作时,我读了UIKit的源代码,部分原因是为了回答我这样的问题,viewDidLoad
在所有UI*ViewController类中都是空的。
当然,我不在那里了,他们可能已经改变了这一切。
发布于 2017-07-31 11:19:00
首先,我认为调用super.viewDidLoad()是一个很好的实践。
在iOS中通常的做法是在超类完成它需要做的设置(初始化属性、布局等等)之后完成所有子类设置。如果在开始更改之前不给超类一个处理其所有设置的机会,那么您可能会遇到一些奇怪的bug和行为。
我们可以绘制一个与类初始化并行的代码:“指定的初始化程序必须在为继承的属性分配值之前委托给超类初始化程序。”我们这样做是为了确保所有超类属性都有一个值,基于这个事实,我们可以通过子类中的继承来安全地使用它们。
经验法则:
假设viewDidLoad()是某种类型的初始化,我们应该首先调用super.viewDidLoad()来正确地设置超类中的内容.
如果我们检查viewDidLoad()在UIViewController基类中的实现,我们可以看到它是空的。因此,从您的子类调用super.viewDidLoad()的唯一原因可能是一种良好的编码风格:-)让我们遵循它!
https://stackoverflow.com/questions/40151723
复制相似问题