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)
因此,每当玩家从游戏中移除时,其硬币将返回到银行.
Adeinit()在类实例被释放之前立即调用,这在您使用自己的资源时很有帮助。例如,如果您创建自定义类来打开文件并向其中写入一些数据,则可能需要在释放类实例之前关闭该文件。deinit()最重要的是要记住,每个类最多可以有一个类定义