Swift 3 析构过程

在一个类的实例不再被需要的时候,就要及时的删除,删除一个类的实例,垃圾回收期就会回收实例占用的内存。在一个类的实例被释放之前,析构函数被立即调用

Swift 使用 deinit 关键字来定义析构函数,类似于初始化函数用 init 来标示

析构函数只适用于类类型

每一个类只能有一个析构函数

Swift 析构过程

Swift 会自动释放不再需要的实例以释放内存资源

Swift 通过自动引用计数(ARC)处理实例的内存管理

通常实例被释放时不需要手动地去清理

但是当使用自己的资源时,可能需要进行一些额外的清理

例如,如果创建了一个自定义的类来打开一个文件,并写入一些数据,就可能需要在类实例被释放之前关闭该文件

在类的定义中,每个类最多只能有一个析构函数

语法

Swift 使用 deint 声明一个析构函数,析构函数不带任何参数,在写法上不带括号

  1. deinit {
  2. // 执行析构过程
  3. }

范例

  1. import Cocoa
  2. var counter = 0; // 引用计数器
  3. class DemoClass
  4. {
  5. init()
  6. {
  7. counter += 1;
  8. }
  9. deinit
  10. {
  11. counter -= 1;
  12. }
  13. }
  14. var show: DemoClass? = DemoClass()
  15. print(counter)
  16. show = nil
  17. print(counter)

编译运行以上 Swift 范例,输出结果为

  1. 1
  2. 0

当 show = nil 语句执行后,计算器减去 1,show 占用的内存就会释放

  1. import Cocoa
  2. var counter = 0; // 引用计数器
  3. class DemoClass
  4. {
  5. init()
  6. {
  7. counter += 1;
  8. }
  9. deinit
  10. {
  11. counter -= 1;
  12. }
  13. }
  14. var show: DemoClass? = DemoClass()
  15. print(counter)
  16. print(counter)

编译运行以上 Swift 范例,输出结果为

  1. 1
  2. 1