指南:析構過程(Deinitialization)

  • 析構器只適用于類類型,當一個類的實例被釋放之前,析構器會被立即調用。析構器用關鍵字deinit來標示。

析構過程原理(How Deinitialization Works)

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

  • 在類的定義中,每個類最多只能有一個析構器,而且析構器不帶任何參數。

  • 析構器是在實例釋放發生前被自動調用。

  • 不能主動調用析構器。

  • 子類繼承了父類的析構器,并且在子類析構器實現的最后,父類的析構器會被自動調用。

  • 因為直到實例的析構器被調用后,實例才會被釋放,所以析構器可以訪問實例的所有屬性,并且可以根據那些屬性可以修改它的行為(比如查找一個需要被關閉的文件)。

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
    }
}

class Player {
    var coinsInPurse: Int
    init(coins: Int) {
        coinsInPurse = Bank.vendCoins(coins)
    }
    func winCoins(coins: Int) {
        coinsInPurse += Bank.vendCoins(coins)
    }
    deinit {
        Bank.receiveCoins(coinsInPurse)
    }
}

var playerOne: Player? = Player(coins: 100)
print("A new player has joined the game with \(playerOne!.coinsInPurse) coins")
// 打印 "A new player has joined the game with 100 coins"
print("There are now \(Bank.coinsInBank) coins left in the bank")
// 打印 "There are now 9900 coins left in the bank"

playerOne!.winCoins(2_000)
print("PlayerOne won 2000 coins & now has \(playerOne!.coinsInPurse) coins")
// 輸出 "PlayerOne won 2000 coins & now has 2100 coins"
print("The bank now only has \(Bank.coinsInBank) coins left")
// 輸出 "The bank now only has 7900 coins left"

playerOne = nil
print("PlayerOne has left the game")
// 打印 "PlayerOne has left the game"
print("The bank now has \(Bank.coinsInBank) coins")
// 打印 "The bank now has 10000 coins"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本章將會介紹 存儲屬性的初始賦值自定義構造過程默認構造器值類型的構造器代理類的繼承和構造過程可失敗構造器必要構造器...
    寒橋閱讀 781評論 0 0
  • 構造過程 構造過程是使用類、結構體或枚舉類型的實例之前的準備過程。在新實例可用前必須執行這個過程,具體操作包括設置...
    蠱毒_閱讀 738評論 0 2
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,885評論 1 10
  • 構造過程是使用類、結構體或枚舉類型的實例之前的準備過程。在新實例可用前必須執行這個過程,具體操作包括設置實例中每個...
    莽原奔馬668閱讀 700評論 0 3
  • 下標腳本 下標腳本 可以定義在類、結構體和枚舉這些目標中,可以認為是訪問集合(collection),列表(li...
    cht005288閱讀 463評論 0 0