一個類實例需要被解除分配之前,“deinitializer”被調(diào)用來釋放內(nèi)存空間。關鍵字 “deinit' 被用于釋放由系統(tǒng)資源占用的存儲空間。反初始化僅適用于類類型。
Swift 當不再需要它們時自動取消分配實例,以釋放資源。Swift 通過自動引用計數(shù)(ARC)處理實例的內(nèi)存管理,如自動引用計數(shù)描述。通常情況下無需進行手動清理,實例會自動被釋放。但是,當正在使用自己的資源,可能需要自己進行一些額外的清理。例如,如果創(chuàng)建一個自定義類來打開一個文件,寫一些數(shù)據(jù),可能需要關閉該文件在類實例釋放之前。
var counter = 0; // for reference counting class baseclass { init() { counter++; } deinit { counter--; } } var print: baseclass? = baseclass() println(counter) print = nil println(counter)
當我們使用 playground 運行上面的程序,得到以下結果。
1 0
當 print = nil 語句省略計數(shù)器的值保持不變,因為它沒有反初始化。
var counter = 0; // for reference counting class baseclass { init() { counter++; } deinit { counter--; } } var print: baseclass? = baseclass() println(counter) println(counter)
當我們使用 playground 運行上面的程序,得到以下結果。
1 1