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