swift学习-初始化器

2020-04-06  本文已影响0人  男人宫

类,结构体,枚举都可以定义初始化器

类有两种初始化器:指定初始化器和便利初始化器

//指定初始化器
init(parameters){
    statements
}
//便利初始化器
convenience init(parameters){
    statements
}

初始化器的相互调用规则:
1.指定初始化器必须从它的直系父类调用指定的初始化器(有子类的时候)
2.便利初始化器必须从相同的类里调用另一个初始化器
3.便利初始化器最终必须调用一个同类的指定初始化器


两段式初始化器:
第一阶段: 初始化所有存储属性
1.外层调用指定/便利初始化器(意思是比如开始创建实例对象的时候,会调用初始化器创建实例)
2.分配内存给实例,但未初始化(分配了内存空间,但数据还没写入,可以通过汇编查看)
3.指定初始化器确保当前类定义的存储属性都初始化
4.指定初始化器调用父类的指定初始化器,不断向上调用,形成初始化链
第二阶段:设置新的存储属性(已经初始化完了,可以设置新值)
1.从顶部初始化器往下,链中的没一个指定初始化器都有机会进一步定制实例
2.初始化器现在能够使用slef(访问,修改它的属性,调用它的实例方法等等)
3.最终,链中的任何便利初始化器都有机会定制实例以及使用self


上一篇 下一篇

猜你喜欢

热点阅读