deinitについて
deinitは、クラスのインスタンスがメモリから解放される直前に自動的に呼ばれる特別なメソッド。これをデストラクタとも呼ぶ。Swiftでは、ARC(Automatic Reference Counting)を使用しているため、通常、メモリ管理は自動で行われる。しかし、リソースを手動で解放する必要がある場合や、特定のクリーンアップ作業を行いたい場合にdeinit
を使う。
例: 本のタイトルを管理するクラス
以下の例では、本のタイトルを管理するシンプルなクラスBooks
を定義している。deinit
を使って、インスタンスが解放される際にログを出力する。
class Books {
var titles: [String]
// コンストラクタで本のタイトルリストを初期化
init(titles: [String]){
self.titles = titles
}
// デストラクタでリソース解放時のログを表示
deinit {
print("deinit called")
}
// 登録されている本のタイトルをプリント
func printTitles(){
for title in titles {
print(title)
}
}
}
// インスタンス作成と利用
var books: Books? = Books(titles: ["1984", "Brave New World", "The Catcher in the Rye", "To Kill a Mockingbird"])
books?.printTitles()
// インスタンスにnilを代入してメモリから解放し、deinitをトリガー
books = nil
実行結果:
1984
Brave New World
The Catcher in the Rye
To Kill a Mockingbird
deinit called
どのような場合に deinit が必要か
- リソースの解放
- ファイルハンドル、ネットワーク接続、またはデータベース接続など、システムリソースを直接管理している場合
- データのクリーンアップ
- インスタンスの寿命が終わる際にデータベースへの書き込みやファイルへのログ出力が必要な場合
- 通知やオブザーバの解除
- イベントの購読や通知リスナーの登録解除が必要な場合