Swift 析構(gòu)過程
在一個類的實例被釋放之前,析構(gòu)函數(shù)被立即調(diào)用。用關(guān)鍵字deinit
來標(biāo)示析構(gòu)函數(shù),類似于初始化函數(shù)用init
來標(biāo)示。析構(gòu)函數(shù)只適用于類類型。
析構(gòu)過程原理
Swift 會自動釋放不再需要的實例以釋放資源。
Swift 通過自動引用計數(shù)(ARC)處理實例的內(nèi)存管理。
通常當(dāng)你的實例被釋放時不需要手動地去清理。但是,當(dāng)使用自己的資源時,你可能需要進(jìn)行一些額外的清理。
例如,如果創(chuàng)建了一個自定義的類來打開一個文件,并寫入一些數(shù)據(jù),你可能需要在類實例被釋放之前關(guān)閉該文件。
語法
在類的定義中,每個類最多只能有一個析構(gòu)函數(shù)。析構(gòu)函數(shù)不帶任何參數(shù),在寫法上不帶括號:
deinit { // 執(zhí)行析構(gòu)過程 }
實例
var counter = 0; // 引用計數(shù)器 class BaseClass { init() { counter += 1; } deinit { counter -= 1; } } var show: BaseClass? = BaseClass() print(counter) show = nil print(counter)
以上程序執(zhí)行輸出結(jié)果為:
1 0
當(dāng) show = nil 語句執(zhí)行后,計算器減去 1,show 占用的內(nèi)存就會釋放。
var counter = 0; // 引用計數(shù)器 class BaseClass { init() { counter++; } deinit { counter--; } } var show: BaseClass? = BaseClass() print(counter) print(counter)
以上程序執(zhí)行輸出結(jié)果為:
1 1
更多建議: