Swift 會自動釋放不再需要的實例以釋放資源。如自動引用計數(shù)那一章描述,Swift 通過自動引用計數(shù)(ARC)處理實例的內(nèi)存管理。通常當(dāng)你的實例被釋放時不需要手動地去清理。但是,當(dāng)使用自己的資源時,你可能需要進行一些額外的清理。例如,如果創(chuàng)建了一個自定義的類來打開一個文件,并寫入一些數(shù)據(jù),你可能需要在類實例被釋放之前關(guān)閉該文件。
在類的定義中,每個類最多只能有一個析構(gòu)函數(shù)。析構(gòu)函數(shù)不帶任何參數(shù),在寫法上不帶括號:
deinit {
// 執(zhí)行析構(gòu)過程
}
析構(gòu)函數(shù)是在實例釋放發(fā)生前一步被自動調(diào)用。不允許主動調(diào)用自己的析構(gòu)函數(shù)。子類繼承了父類的析構(gòu)函數(shù),并且在子類析構(gòu)函數(shù)實現(xiàn)的最后,父類的析構(gòu)函數(shù)被自動調(diào)用。即使子類沒有提供自己的析構(gòu)函數(shù),父類的析構(gòu)函數(shù)也總是被調(diào)用。
因為直到實例的析構(gòu)函數(shù)被調(diào)用時,實例才會被釋放,所以析構(gòu)函數(shù)可以訪問所有請求實例的屬性,并且根據(jù)那些屬性可以修改它的行為(比如查找一個需要被關(guān)閉的文件的名稱)。