我什么时候应该使用deinit?

Ayu*_*Ayu 33 swift

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

问候.

Con*_*nor 35

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

苹果的文档包括例如:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,每当玩家从游戏中移除时,其硬币将返回到银行.

  • @user523234 因为银行有明确的身份,所以你存钱的地方就有一家银行。银行不仅仅是一个抽象概念(信息的集合),即使拥有完全相同的信息,两家银行也不会是同一家银行。 (2认同)

Rak*_*una 7

Adeinit()在类实例被释放之前立即调用,这在您使用自己的资源时很有帮助。例如,如果您创建自定义类来打开文件并向其中写入一些数据,则可能需要在释放类实例之前关闭该文件。deinit()最重要的是要记住,每个类最多可以有一个类定义