反初始化概念:
Swift里面有自動內(nèi)存管理機(jī)制(ARC)碘橘,當(dāng)你的實(shí)例被銷毀的時候自動幫你清理內(nèi)存。但是有時候你想要手動釋放內(nèi)存谤碳,想要在內(nèi)存釋放之前做一些操作佑钾,如:當(dāng)你的自定義的類的一個實(shí)例打開一個文件寫入數(shù)據(jù)的時候,你需要在這個實(shí)例銷毀(deallocated)之前將文件關(guān)閉這時候就需要反初始化(Deinitialization)烂翰。與初始化不同夯缺,每個類最多有一個反初始化方法。反初始化的關(guān)鍵字是deinit甘耿,反初始化的格式如下:
deinit {
// perform the deinitialization
}```
#####反初始化舉例:
定義一個Bank 類踊兜,再定義一個有deinit 方法的Player 類,當(dāng)每個Player 實(shí)例消亡之前都會執(zhí)行Player 的deinit 方法佳恬。
//Bank 類
class Bank {
static var coinsInBank = 10_000
static func vendCoins(numberOfCoinsRequested: Int) -> Int {
let numberOfCoinsToVend = min(numberOfCoinsRequested, coinsInBank)
coinsInBank -= numberOfCoinsToVend
return numberOfCoinsToVend
}
static func receiveCoins(coins: Int) {
coinsInBank += coins
}
}
//Player 類
class Player {
var coinsInPurse: Int
init(coins: Int) {
coinsInPurse = Bank.vendCoins(coins)
}
func winCoins(coins: Int) {
coinsInPurse += Bank.vendCoins(coins)
}
deinit {
Bank.receiveCoins(coinsInPurse)//實(shí)例銷毀之前執(zhí)行這里
}
}
var playerOne: Player? = Player(coins: 100)
print("A new player has joined the game with (playerOne!.coinsInPurse) coins")
// Prints "A new player has joined the game with 100 coins"
print("There are now (Bank.coinsInBank) coins left in the bank")
// Prints "There are now 9900 coins left in the bank"```