一尘不染

什么时候应该使用deinit?

swift

deinit()在阅读
Swift编程语言》指南
时遇到了一个叫做的函数,但我仍然想知道为什么以及何时需要实现它,因为我们实际上不需要管理内存。


阅读 270

收藏
2020-07-07

共1个答案

一尘不染

不需要实现该方法,但是如果需要在取消分配对象之前进行一些操作或清理,则可以使用它。

苹果的文档包括例如:

struct Bank {
    static var coinsInBank = 10_000
    static func vendCoins(var numberOfCoinsToVend: Int) -> Int {
        numberOfCoinsToVend = min(numberOfCoinsToVend, 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)
    }
}

因此,无论何时将玩家从游戏中移除,其硬币都会退还至银行。

2020-07-07