Swift 析構過程


在一個類別的實例被釋放之前,析構函數被立即呼叫。用關鍵字deinit來標示析構函數,類似初始化函數用init來標示。析構函數只適用於類別類型。


析構過程原理

Swift 會自動釋放不再需要的實例以釋放資源。

Swift 透過自動引用計數(ARC)處理實例的記憶體管理。

通常當你的實例被釋放時不需要手動地去清理。但是,當使用自己的資源時,你可能需要進行一些額外的清理。

例如,如果建立了一個自訂的類別來開啟一個文件,並寫入一些數據,你可能需要在類別實例被釋放之前關閉該文件。

語法

在類別的定義中,每個類別最多只能有一個析構函數。析構函數不帶任何參數,在寫法上不帶括號:

deinit {
    // 执行析构过程
}

實例

var counter = 0;  // 引用计数器
class BaseClass {
    init() {
        counter++;
    }
    deinit {
        counter--;
    }
}

var show: BaseClass? = BaseClass()
print(counter)
show = nil
print(counter)

以上程式執行輸出結果為:

1
0

當show = nil 語句執行後,計算機減去1,show 佔用的記憶體就會釋放。

var counter = 0;  // 引用计数器

class BaseClass {
    init() {
        counter++;
    }
    
    deinit {
        counter--;
    }
}

var show: BaseClass? = BaseClass()

print(counter)
print(counter)

以上程式執行輸出結果為:

1
1