为什么调用 init() 会调用 init(frame: CGRect)?
Why does calling init() calls init(frame: CGRect)?
当我有一个自定义的 UIView
并像这样覆盖初始化时:
class ContainerView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setup() {
}
}
为什么我可以像这样使用简单的 init
来初始化视图并调用 setup()
方法?
let view = CustomView()
当我调用简单的 NSObject init()
而不是 init(frame: CGRect)
?
时,我希望它不会被调用
那frame
参数是怎么传的?
调用 CustomView()
正在使用 NSObject
的继承初始值设定项。这隐含地调用 UIView
的指定初始化程序,init(frame:)
和 .zero
。由于您已经重写了该初始化程序,因此会调用您的重写,因此也会调用 setup()
方法。
您可以通过在初始化程序中打印出 frame
参数来看到这一点;你会得到一个 .zero
矩形。
当我有一个自定义的 UIView
并像这样覆盖初始化时:
class ContainerView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setup() {
}
}
为什么我可以像这样使用简单的 init
来初始化视图并调用 setup()
方法?
let view = CustomView()
当我调用简单的 NSObject init()
而不是 init(frame: CGRect)
?
那frame
参数是怎么传的?
调用 CustomView()
正在使用 NSObject
的继承初始值设定项。这隐含地调用 UIView
的指定初始化程序,init(frame:)
和 .zero
。由于您已经重写了该初始化程序,因此会调用您的重写,因此也会调用 setup()
方法。
您可以通过在初始化程序中打印出 frame
参数来看到这一点;你会得到一个 .zero
矩形。