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