UIViewController的便捷init调用了什么初始化器?

时间:2019-01-22 13:56:06

标签: swift uiviewcontroller initializer

我经常在UIViewController中使用便捷初始化来创建自定义初始化程序。

但是我不知道在UIViewController时会调用什么现有的self.init()初始化程序。

public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)吗?

self.init()的方便初始化中UIViewController被称为什么?

final class SampleViewController: UIViewController {
    private var component: Component?

    convenience init(component: Component) {  // Custom initializer
       self.init()  // What is this initializer?
       self.component = component
    }

    override func viewDidLoad() {
       ...
    }
    ...
}

3 个答案:

答案 0 :(得分:3)

UIViewController.init呼叫UIViewController.init(nibName: nil, bundle: nil)。这意味着nibName将等于类的名称,并且包将成为主包。

UIViewController.init只是一个便捷的初始化程序。很快可以使用默认参数UIViewController.init(nibName: String? = nil, bundle: NSBundle? = nil)来实现,但这是一个旧的Objective-C API,而Objective-C没有默认参数,这就是为什么init()有单独的便利之处。

答案 1 :(得分:-1)

这取决于UIViewController的实例化方式。

通过代码直接调用时可能是init(nibName: String?, bundle: Bundle?),如果是通过Interface Builder机制(Storyboard Segue,Main View Controller等)实例化的,则可能是init?(coder: NSCoder)

答案 2 :(得分:-1)

UIViewController是来自UIResponder的NSObject ...

在NSObject中,您有一个没有参数的init,它只是实例化内存...

提示:总是CMD +如果发现有些奇怪的内容,请点击课程...并扎根。