我想知道从代码初始化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属性。
哪种方式更正确?为什么?
答案 0 :(得分:1)
关注点的分离会建议使用这两种方法。覆盖loadView()
以初始化并设置视图init()
以初始化其他属性。
loadView()
是懒惰的,这意味着在某些东西试图访问视图控制器的.view
属性之前,它不会被调用。
要扩展init应包含的内容,如果您的视图控制器需要网络访问权限,那么它就是您应该获取(或注入)HTTP管理器的地方。