如何以编程方式正确初始化ViewController? loadView()vs init(nibName:nil,bundle:nil)

时间:2016-03-09 09:03:21

标签: ios iphone swift uikit

我想知道从代码初始化ViewController的正确方法是什么。没有xib或故事板。

我知道两种方式。覆盖loadView()

override func loadView() {
    view = UIView()
    commonInit() // some init
}

或提供init()

init() {
    super.init(nibName: nil, bundle: nil)
    commonInit() // some init
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

如果我们提供init并且nib是nil我知道我们调用loadView()的默认实现来设置我们的view属性。

哪种方式更正确?为什么?

1 个答案:

答案 0 :(得分:1)

关注点的分离会建议使用这两种方法。覆盖loadView()以初始化并设置视图init()以初始化其他属性。

loadView()是懒惰的,这意味着在某些东西试图访问视图控制器的.view属性之前,它不会被调用。

要扩展init应包含的内容,如果您的视图控制器需要网络访问权限,那么它就是您应该获取(或注入)HTTP管理器的地方。