Swift 取消初始化(Deinitialization)

在本教程中,我们将通过实例了解 Swift 取消初始化(Deinitialization)。

取消初始化(Deinitialization)是一个在不再需要类实例时取消分配类实例的过程。这将释放系统占用的内存空间。

我们使用 deinit 关键字创建一个 deinitializer。例如,

  1. class Race {
  2. ...
  3. // create deinitializer
  4. deinit {
  5. // perform deinitialization
  6. ...
  7. }
  8. }

这里,deinitRace 类的 deinitializer(取消初始化)。

在您了解取消初始化之前,请确保您了解 Swift 初始化


实例:取消初始化

  1. // declare a class
  2. class Race {
  3. var laps: Int
  4. // define initializer
  5. init() {
  6. laps = 5
  7. print("Race Completed")
  8. print("Total laps:", laps)
  9. }
  10. // define deinitializer
  11. deinit {
  12. print("Memory Deallocated")
  13. }
  14. }
  15. // create an instance
  16. var result: Race? = Race()
  17. // deallocate object
  18. result = nil

结果如下:

  1. Race Completed
  2. Total laps: 5
  3. Memory Deallocated

在上面的例子中,

1.我们在 Race 类中创建了一个 deinitializer

  1. deinit {
  2. print("Memory Deallocated")
  3. }

2.然后,我们创建了 Race 类的实例,并将其赋值给名为 resultRace 类型变量。

  1. // create an instance
  2. var result: Race? = Race()

这里,Race? 指结果是可选的,因此它可以存储两种类型的值:

  • Race 类型的值
  • 0

3.最后,我们将结果赋值为 0

  1. // deallocate instance
  2. result = nil

这时释放实例。在释放类实例之前,会自动调用取消初始化。然后执行其中的语句。

注意

  • 在 Swift 中,我们只在手动取消分配实例时使用取消初始化。否则,Swift 会自动执行解除赋值。
  • 取消初始化 deinitializer 只能与类一起使用,不能与结构一起使用。
  • 每个类只能有一个取消初始化 deinitializer