一、导入
构造函数式从无到有,诞生的过程
析构函数相反,从有到无,也就是死亡的时候会调用的函数。
二、定义
每个类最多只能有一个析构器,而且析构器不带任何参数和圆括号
deinit{
}
机制:Swift 会自动调用析构函数释放不再需要的实例以释放资源
通常在析构函数中释放一些资源(如移除通知,关闭文件等操作),帮我们定位内存泄露问题
三、deinit运行原理,涉及两个问题,请大家思考:
1、怎么判断什么时候不再需要一个实例了?怎么知道我什么时候去回收,什么时候不回收?
2、如何实现自动释放?
实现:
Swift 通过自动引用计数(ARC)处理实例的内存管理-有人用,我就不回收;没人用,我就收走;
当引用计数为0时,系统会自动调用析构函数(不可以手动调用)
class Person {
var name : String
var age : Int
init(name : String, age : Int) {
print("调用构造函数")
self.name = name
self.age = age
}
deinit {
print("调用析构函数")
//释放资源
}
}
var p1:Person? = Person(name:"zhangsan",age:18)
var p2:Person? = p1
var p3:Person? = p2
p1 = nil
p2 = nil
p3 = nil//此时计数器为0,调用析构函数