- 快速教程
 - 斯威夫特 - 主页
 - 斯威夫特 - 概述
 - Swift - 环境
 - Swift - 基本语法
 - Swift - 数据类型
 - Swift - 变量
 - Swift - 可选
 - Swift - 元组
 - Swift - 常量
 - Swift - 文字
 - Swift - 运算符
 - Swift - 决策
 - Swift - 循环
 - Swift - 字符串
 - 斯威夫特 - 角色
 - Swift - 数组
 - Swift - 套装
 - 斯威夫特 - 字典
 - Swift - 函数
 - Swift - 闭包
 - Swift - 枚举
 - Swift - 结构
 - Swift - 类
 - Swift - 属性
 - Swift - 方法
 - Swift - 下标
 - Swift - 继承
 - Swift - 初始化
 - Swift - 去初始化
 - Swift - ARC 概述
 - Swift - 可选链接
 - Swift - 类型转换
 - Swift - 扩展
 - Swift - 协议
 - Swift - 泛型
 - Swift - 访问控制
 
- 斯威夫特有用的资源
 - Swift - 在线编译
 - Swift - 快速指南
 - Swift - 有用的资源
 - 斯威夫特 - 讨论
 
Swift - 去初始化
在需要释放类实例之前,必须调用“deinitializer”来释放内存空间。关键字“deinit”用于释放系统资源占用的内存空间。反初始化仅适用于类类型。
去初始化以释放内存空间
当不再需要实例时,Swift 4 会自动释放实例以释放资源。Swift 4 通过自动引用计数 (ARC) 处理实例的内存管理,如自动引用计数中所述。通常,当实例被释放时,您不需要执行手动清理。但是,当您使用自己的资源时,您可能需要自己执行一些额外的清理工作。例如,如果您创建自定义类来打开文件并向其中写入一些数据,则可能需要在释放类实例之前关闭该文件。
var counter = 0; // for reference counting
class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()
print(counter)
print = nil
print(counter)
当我们使用 Playground 运行上述程序时,我们得到以下结果 -
1 0
当省略 print = nil 语句时,计数器的值保持不变,因为它没有被取消初始化。
var counter = 0; // for reference counting
class baseclass {
   init() {
      counter++;
   }
   deinit {
      counter--;
   }
}
var print: baseclass? = baseclass()
print(counter)
print(counter)
当我们使用 Playground 运行上述程序时,我们得到以下结果 -
1 1