美文网首页
构造函数

构造函数

作者: lsj980Ya | 来源:发表于2020-12-08 16:47 被阅读0次

类对象构造函数代理

规则1 指定构造器必须直接调用其父类指定构造器。
规则2 便利构造器必须调用同一类另一个初始化器。
规则3 便利构造器最终必须调用指定构造器
一个简单的方法是: 指定构造器向上代理。 便利构造器横向代理

swift 构造函数代理

两阶段初始化

Swift中的类初始化是一个两阶段的过程。在第一个阶段,每个存储的属性由引入它的类分配一个初始值。一旦确定了每个存储属性的初始状态,第二阶段就开始了,在认为新实例已经准备好使用之前,每个类都有机会进一步定制其存储属性。

使用两阶段初始化过程使初始化安全,同时仍然为类层次结构中的每个类提供完全的灵活性。两阶段初始化可以防止属性值在初始化之前被访问,并防止属性值被另一个初始化器意外地设置为不同的值

Swift的编译器执行了四项有用的安全检查,以确保两阶段初始化没有错误地完成

Safety check 1 指定构造器必须确保在委托给超类初始化器之前,其类引入的所有属性都已初始化。

如上所述,对象的内存只有在其所有存储属性的初始状态已知之后才被认为已完全初始化。为了满足这个规则,指定构造器必须确保在传递给父类之前,它自己的所有属性都被初始化了。

Safety check 2 指定构造器在将值赋给继承的属性之前,必须将其委托给超类指定构造器。如果没有,指定构造器分配的新值将被超类覆盖,作为它自己初始化的一部分。
Safety check 3 一个便利构造器在为任何属性(包括由同一类定义的属性)赋值之前,必须委托给另一个初始化器。如果没有,便利构造器分配的新值将被它自己的指定构造器覆盖。
Safety check 4 在第一个初始化阶段完成之前,初始化器不能调用任何实例方法、读取任何实例属性的值或引用self作为值。

直到第一个阶段结束,类实例才完全有效。只有在第一阶段结束时知道类实例是有效的,才能访问属性,也只能调用方法。

自动初始化继承规则

如上所述,默认情况下,子类不继承其超类初始化器。但是,如果满足某些条件,超类初始值设定项会自动继承。在实践中,这意味着在许多常见的场景中,您不需要编写初始化器重写,并且可以在安全的情况下以最小的努力继承超类初始化器

规则1 如果你的子类没有定义任何指定构造器,它会自动继承所有超类指定构造器
规则2 如果您的子类提供了其超类指定的所有指定构造器的实现——或者通过按照规则1继承它们,或者通过提供自定义实现(重写或者以便利构造器重写父类所有指定构造器)——那么它将自动继承所有父类便利构造器。

相关文章

  • Flutter 6种构造函数详解

    Flutter有生成构造函数、默认构造函数、命名构造函数、重定向构造函数、常量构造函数、工厂构造函数 一.生成构造...

  • C# 构造函数总结

    构造函数 构造函数分为:实例构造函数,静态构造函数,私有构造函数。 实例构造函数 1、构造函数的名字与类名相同。 ...

  • Javascript 基础之原型链

    构造函数、构造函数实例、构造函数原型 function Student (name) { } - 这是构造函数va...

  • Swift基础语法-类的构造函数

    本节知识点 构造函数的介绍 构造函数的基本使用 自定义构造函数 属性与构造函数 1. 构造函数的介绍 构造函数类似...

  • C++:面向对象基础

    构造函数 C++中有三种构造函数:默认构造函数,有参构造函数,拷贝构造函数 类对象的初始化 括号法//默认构造函数...

  • 构造函数

    构造函数分为: 1.实例构造函数 2.私有构造函数 3.静态构造函数 私有构造函数 私有构造函数是一种特殊的实例构...

  • Dart整理

    Dart构造函数 普通构造函数和命名构造函数 默认构造函数一个类没有声明构造函数,默认会有一个无参构造函数,声明了...

  • Kotlin面向对象 (3)✔️构造函数

    主构造函数次构造函数默认构造函数 kotlin中的构造函数有主次之分,主构造函数只能有一个,此构造函数可以有多个。...

  • [C++之旅] 10 构造函数

    [C++之旅] 10 构造函数 构造函数的特点 构造函数在对象实例化时被自动调用 构造函数与类同名 构造函数没有返...

  • Java基础-3 构造函数

    构造函数: 构造函数的作用: 给对应的对象进行初始化。 构造函数的格式: 构造函数要注意的细节:1. 构造函数是...

网友评论

      本文标题:构造函数

      本文链接:https://www.haomeiwen.com/subject/rstfwktx.html