【问题标题】:How to properly initialize ViewController programmatically? loadView() vs init(nibName: nil, bundle: nil)如何以编程方式正确初始化 ViewController? loadView() vs init(nibName: nil, bundle: nil)
【发布时间】:2016-03-09 09:03:21
【问题描述】:

我想知道从代码初始化 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() 的默认实现,它设置了我们的视图属性。

哪种方法更正确,为什么?

【问题讨论】:

    标签: ios iphone swift uikit


    【解决方案1】:

    关注点分离建议同时使用这两种方法。覆盖loadView() 来初始化和设置视图,init() 来初始化其他属性。

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

    为了扩展 init 应该包含的内容,如果您的视图控制器需要网络访问,例如您应该获取(或注入)您的 HTTP 管理器的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多