Table of Contents
Swiftの公式ドキュメントより、deinit(Deinitialization)について要点をまとめました。
deinitの要点
- クラスのインスタンスが解放される直前に自動的に呼ばれる
- 任意のタイミングで呼び出すことはできない
- クラスでしか使えない。1つのクラスにつき1つのdeinitが定義できる
- 基本的にメモリ解放にはARCが働くので使う機会は少ない
- 自前のリソースを使っている場合、その解放のために使うことができる(例: 書き込みのために開いたファイルなど)
deinitの書き方
deinit {
// ここに解放処理などを書く
// まだインスタンスは解放されていないので、クラス内のすべての変数などにアクセスできる
}
deinitの使用例
公式ドキュメントの例では、ゲームのプレイヤーのインスタンスが破棄される時、所持しているお金を返すという用途で使用されています。
class Player {
// プレイヤーの所持金
var coinsInPurse: Int
init(coins: Int) {
coinsInPurse = Bank.vendCoins(coins)
}
func winCoins(coins: Int) {
coinsInPurse += Bank.vendCoins(coins)
}
deinit {
// 破棄される前に銀行に所持金をすべて返す
Bank.receiveCoins(coinsInPurse)
}
}
また、SwiftでKVO(Key-Value Observing)を行うとき、その observer を除去する際に deinit を使うことが推奨されています。
Using Swift with Cocoa and Objective-C (Swift 2.2): Adopting Cocoa Design Patterns

ピンバック: [Swift3.0] NotificationCenter を使ってアプリの状態に応じた処理を行う | JoyPlotドキュメント