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ドキュメント