學習Swift 析構過程

2022-09-17 10:30:13 字數 1245 閱讀 8301

析構器只適用於類型別,當乙個類的例項被釋放之前,析構器會被立即呼叫。析構器用關鍵字deinit來標示,類似於構造器要用init來標示。

swift 會自動釋放不再需要的例項以釋放資源,swift 通過自動引用計數(arc)處理例項的記憶體管理。通常當你的例項被釋放時不需要手動地去清理。但是,當使用自己的資源時,你可能需要進行一些額外的清理。例如,如果建立了乙個自定義的類來開啟乙個檔案,並寫入一些資料,你可能需要在類例項被釋放之前手動去關閉該檔案。

deinit

析構器是在例項釋放發生前被自動呼叫。析構器是不允許被主動呼叫的。子類繼承了父類的析構器,並且在子類析構器實現的最後,父類的析構器會被自動呼叫。即使子類沒有提供自己的析構器,父類的析構器也同樣會被呼叫。

因為直到例項的析構器被呼叫時,例項才會被釋放,所以析構器可以訪問所有請求例項的屬性,並且根據那些屬性可以修改它的行為(比如查詢乙個需要被關閉的檔案)。

// 遊戲幣中心 結構體

struct bank

// **遊戲幣

static func receivecoins(coins: int)

}// 玩家類

class player

func wincoins(coins: int)

deinit

}// 這裡將playerone設定為可選屬性,因為playerone隨時會被制為nil

var playerone: player? = player(coins: 3000)

// player 3000 bank 7000

print("playerone coins:\(playerone!.coinsinpurse), bank coins: \(bank.coinsinbank)")

playerone?.wincoins(500)

// player 3500 bank 6500

print("playerone coins:\(playerone!.coinsinpurse), bank coins: \(bank.coinsinbank)")

// 將playerone制為空,沒有任何引用指向playerone記憶體,arc機制會自動釋放這塊記憶體,deinit方法被呼叫,歸還遊戲幣

playerone = nil

// bank 10000

print("bank coins: \(bank.coinsinbank)")

Swift 析構過程

析構器只適用於類型別,當乙個類的例項被釋放之前,析構器會被立即呼叫。析構器用關鍵字deinit來標示,類似於構造器要用init來標示。析構過程原理 swift 會自動釋放不再需要的例項以釋放資源。如自動引用計數章節中所講述,swift 通過自動引用計數 arc 處理例項的記憶體管理。通常當你的例項被...

Swift 析構過程

析構器只適用於類型別,當乙個類的例項被釋放之前,析構器會被立即呼叫。析構器的關鍵字deinit來標示,類似於構造器要用init來標示。swift會自動釋放不再需要的例項以釋放資源。swift通過自動引入計數處理例項的記憶體管理。通常當你的例項被釋放時不惜要手動去清理。但是,當使用自己的資源時,你可能...

Swift學習 2 15 析構過程

參考swift 官方教程 the swift programming language 中文版 在乙個類的例項被釋放之前,析構函式被立即呼叫。用關鍵字deinit來標示析構函式,類似於初始化函式用init來標示。析構函式只適用於類型別。swift 會自動釋放不再需要的例項以釋放資源。如自動引用計數那...