Swift 析構過程
在一個類的實例被釋放之前,析構函數被立即調用。用關鍵字deinit
來標示析構函數,類似於初始化函數用init
來標示。析構函數只適用於類類型。
析構過程原理
Swift 會自動釋放不再需要的實例以釋放資源。
Swift 通過自動引用計數(ARC)處理實例的記憶體管理。
通常當你的實例被釋放時不需要手動地去清理。但是,當使用自己的資源時,你可能需要進行一些額外的清理。
例如,如果創建了一個自定義的類來打開一個檔,並寫入一些數據,你可能需要在類實例被釋放之前關閉該檔。
語法
在類的定義中,每個類最多只能有一個析構函數。析構函數不帶任何參數,在寫法上不帶括弧:
deinit { // 執行析構過程 }
實例
var counter = 0; // 引用計數器 class BaseClass { init() { counter += 1; } deinit { counter -= 1; } } var show: BaseClass? = BaseClass() print(counter) show = nil print(counter)
以上程式執行輸出結果為:
1 0
當 show = nil 語句執行後,計算器減去 1,show 佔用的記憶體就會釋放。
var counter = 0; // 引用計數器 class BaseClass { init() { counter += 1; } deinit { counter -= 1; } } var show: BaseClass? = BaseClass() print(counter) print(counter)
以上程式執行輸出結果為:
1 1