【发布时间】:2016-08-04 05:53:05
【问题描述】:
查看斯坦福 iOS 9 课程 here 的讲座幻灯片,他正在创建一个带有两个初始化器的新 UIView(一个是 UIView 是从情节提要创建的,一个是在代码中创建的) )。以下代码写在该特定幻灯片的底部:
func setup() {....} //This contains the initialization code for the newly created UIView
override init(frame: CGRect) { //Initializer if the UIView was created using code.
super.init(frame: frame)
setup()
}
required init(coder aDecoder: NSCoder) { //Initializer if UIView was created in storyboard
super.init(coder:aDecoder)
setup()
}
规则是您必须先初始化所有自己的属性,然后才能从超类中获取 init。那么为什么在这种情况下,他在初始化自己 setup() 之前调用他的超类 init super.init?这不违反以下规则吗:
安全检查 1 指定的初始化程序必须确保其类引入的所有属性在委托给超类初始化程序之前都已初始化。
如上所述,一个对象的内存只有在其所有存储属性的初始状态已知时才被认为是完全初始化的。为了满足这个规则,指定的初始化器必须确保在它传递链之前初始化它自己的所有属性。
【问题讨论】:
标签: ios swift xcode uiview initialization