每个人都告诉我"使用super.viewDidLoad(),因为它就像那样"或"我一直都这样做,所以保持","如果你不称之为",那就错了"等等.
override func viewDidLoad() {
super.viewDidLoad()
// other stuff goes here
}
Run Code Online (Sandbox Code Playgroud)
我只发现了一些关于Objective-C案例的话题并且它们并不那么具有启发性,但我正在开发Swift 3,那么任何专家都可以给我一个很好的详细解释吗?
这是一个好的做法还是有任何隐藏的影响?
tsp*_*tsp 35
通常,对于没有返回值的所有覆盖函数调用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
}
}
Run Code Online (Sandbox Code Playgroud)
不在这里调用viewDidLoad永远不会PrintingViewController
有机会运行自己的viewDidLoad
代码
如果你不想做任何事情viewDidLoad
就不要实现它.无论如何都会调用super方法.
mxc*_*xcl 10
我有一个秘密,在苹果公司工作时,我阅读了UIKit的源代码,部分回答了我这样的问题,viewDidLoad
在所有UI * ViewController类中都是空的。
我自然不在了,他们可能已经改变了这一点。
取决于实施viewDidLoad
中的类UIViewController
(从其中所有视图控制器继承).如果它是空的比呼叫super.viewDidLoad()
不会做太多.但是,如果它有一些关于视图控制器的功能,那么你肯定会想要使用它.
由于关于a的实现并不在你手中,所以UIViewController
你应该总是调用这个方法
我认为调用super.viewDidLoad()首先是一个很好的做法.
iOS中通常的做法是在超类完成它需要完成的设置(初始化属性,放置等等)之后,完成所有子类设置.如果在开始更改内容之前没有给超类提供处理其所有设置的机会,那么您可能会遇到一些奇怪的错误和行为.
我们可以使用类初始化绘制并行:"在为继承的属性赋值之前,指定的初始化程序必须委托一个超类初始化程序." 我们这样做是为了确保所有超类属性都有一个值,基于这一事实我们可以通过子类中的继承安全地使用它们.
经验法则:
假设viewDidLoad()是某种初始化,我们应首先调用super.viewDidLoad()来正确设置超类中的内容.
如果我们在UIViewController基类中检查viewDidLoad()的实现,我们可以看到它是空的.所以也许从你的子类调用super.viewDidLoad()的唯一原因是一个很好的编码风格:-)让我们遵循它!
归档时间: |
|
查看次数: |
12451 次 |
最近记录: |