Swift解構器(Deinitializer)


在需要釋放類範例之前,必須呼叫解構器(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