知识卡片
构造安全检查防止未完成实例泄漏
内容
Swift 编译器在类的构造过程中强制四条顺序规则:子类必须先构造完自己所有的存储属性, 才能调用父类的指定构造方法;子类要覆盖父类属性的默认值,必须在调用父类构造方法之后 才能做;便利构造方法对属性的二次设置,必须排在它所调用的指定构造方法之后;子类在调用 父类构造方法完成之前,完全不能使用 self 去访问任何属性或方法。这四条规则合起来保证的 是同一件事:任何时刻只要能拿到 self,这个实例就已经是完全初始化好的,不存在”半成品” 状态。发散:这本质是把”构造函数执行到一半时对象处于非法中间态”这类经典 bug 源头,从 运行时纠错推到了编译期直接拒绝编译。
参考来源
《Swift 4从零到精通iOS开发》第9章《构造方法与析构方法》