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)
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    1
    0
    
    当 print = nil 语句被省略时,计数器的值保持不变,因为它没有被取消初始化。
    
    var counter = 0; // for reference counting
    class baseclass {
       init() {
          counter++;
       }
       deinit {
          counter--;
       }
    }
    var print: baseclass? = baseclass()
    print(counter)
    print(counter)
    
    当我们使用操场运行上述程序时,我们得到以下结果 -
    
    1
    1