析构函数

2020-04-16  本文已影响0人  豌豆_b314

一、导入
构造函数式从无到有,诞生的过程
析构函数相反,从有到无,也就是死亡的时候会调用的函数。

二、定义
每个类最多只能有一个析构器,而且析构器不带任何参数和圆括号
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,调用析构函数
上一篇 下一篇

猜你喜欢

热点阅读