反初始化(Deinitialization)

反初始化概念:

Swift里面有自动内存管理机制(ARC),当你的实例被销毁的时候自动帮你清理内存。但是有时候你想要手动释放内存,想要在内存释放之前做一些操作,如:当你的自定义的类的一个实例打开一个文件写入数据的时候,你需要在这个实例销毁(deallocated)之前将文件关闭这时候就需要反初始化(Deinitialization)。与初始化不同,每个类最多有一个反初始化方法。反初始化的关键字是deinit,反初始化的格式如下:

deinit {
    // perform the deinitialization
 }```
#####反初始化举例:
定义一个Bank 类,再定义一个有deinit 方法的Player 类,当每个Player 实例消亡之前都会执行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)//实例销毁之前执行这里
}
}
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"```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 反初始化 (Deinitialization) 自从苹果2014年发布Swift,到现在已经两年多了,而Swift...
    Lebron_James阅读 596评论 0 0
  • 126.析构器 在一个类实例销毁前,一个析构器会立即调用。使用deinit 关键字来表示析构器, 跟构造器写法类似...
    无沣阅读 855评论 0 4
  • 官方文档 初始化 Initialization是为准备使用类,结构体或者枚举实例的一个过程。这个过程涉及了在实例里...
    hrscy阅读 1,153评论 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,923评论 1 10
  • 10.6卡 熊志华~【日精进打卡第16天】 深圳慧友冠源科技有限公司 【知~学习】 行动+付出+方法=收获 (每天...
    华仁阅读 150评论 0 0