20170613基础知识-构造与析构

1、结构体和类,在创建实例过程中,需要进行一些初始化的工作,这个过程:构造过程。

实例最后被释放的时候,需要进行一些清除资源的工作,这个过程:析构过程。

2、构造函数:init方法,没有返回值,可以重载,在构造函数重载的情况下,运行环境可以根据它的参数标签、参数列表,调用合适的构造函数。

class Rectangle {

var width: Double = 0.0

var height: Double = 0.0

init() {

}

}

struct Rectangle {

var width: Double = 0.0

var height: Double = 0.0

init() {

}

init(width: Double, height: Double) {

self.width = width

self.height = height

}

}

3、构造函数主要作用:初始化实例,初始化存储属性和其他的初始化,如果在构造函数中初始化存储属性,那么定义时就不需要初始化

class Rectangle {

var width: Double

var height: Double

init() {

width = 0.0

height = 0.0

}

}

存储属性必须初始化,在构造函数中初始化,或者在定义的时候初始化;计算属性不保存数据,不需要初始化;构造函数不能初始化静态属性

构造函数中常量属性,可以不在定义的时候赋值,可以在构造函数中赋值

4、构造函数中的参数,可以直接作为参数标签使用

5、结构体有一种特殊的写法:

struct RectangleC {

var width: Double = 0.0

var height: Double = 0.0

}

var rectc = RectangleC(width: 320, height: 480)

按照从上到下的顺序,把属性名作为参数标签

6、构造函数代理:为了减少多个构造函数间的代码重复,在定义构造函数的时候,可以通过调用其他构造函数,来完成实例的部分构造过程。

7、结构体构造函数代理:self.init

struct Rectangle {

var width: Double

var height: Double

init(width: Double, height: Double) {

self.width = width

self.height = height

}

init() {

self.init(width: 640.0, height: 940.0)

}

init(length: Double) {

self.init(width: length, height: length)

}

}

8、类构造函数代理:

横向代理:类似于结构体类型构造函数代理,发生在同一类内部,便利构造函数

向上代理:发生在继承情况下,在子类构造过程中,要先调用父类构造函数,初始化父类的存储属性,指定构造函数

convenience init() {} 表示便利构造函数

9、析构函数

deinit,没有返回值,没有参数,没有小括号,不能重载  deinit{}

析构函数,只适用于类,不适用于枚举和结构体

存在析构函数,创建实例时,要用?,这样才能赋值nil,析构函数的调用是使实例被赋值nil

var rect1: Rectangle? = Rectangel(width: 320, height: 480)  print()rect1 = nil触发析构函数的条件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容