Swift による iOS 開発入門

ホーム > Swift の基本 > Deinitializer

Deinitializer

Swift のクラスでは、オブジェクトのクリーンアップ処理は基本的に自動的に行なわれます。

オブジェクトが使われなくなったら勝手にランタイムがクリーンアップしてくれるので、C 言語などのように「メモリの解放」といったような処理を自前でする必要は無くて、 基本的に何もしなくていいわけです。

しかし、例えば OS に関連付くようなファイルハンドルといったリソースは、なるべく速くクリーンアップしたいでしょう。

ここではそうしたクリーンアップに役立つ Deinitializer について説明します。

デイニシャライザ

Swift のオブジェクトは、自動参照カウント (Automatic Reference Counting, ARC) の仕組みがあり、オブジェクトへの参照がどのくらいあるかチェックしています。 参照がなくなったら、もうこのオブジェクトは使われていないということで、解放可能となります。

通常は不要となったオブジェクトは Swift のランタイムが勝手に解放してくれるので、何もしなくていいわけです。

しかし、そのオブジェクトで数少ないシステムリソースを利用している場合は、使わなくなったらなるべく速やかにクリーンアップしたいでしょう。

ARC によってオブジェクトが不要となったときに即座に実行されるコードブロックを記述できる場所が、デイニシャライザ (deinitializer) です。

デイニシャライザは、クラスでのみ利用可能で deinit キーワードを使って記述します。

実行例をみてみましょう。次の例では関数 foo 内で Car オブジェクトを生成しています。Car クラスでは deinit が実装されています。

foo を抜けるときにコンソールに Exit foo とプリントして、そのあとに deinit からの出力がプリントされています。

ホーム > Swift の基本 > Deinitializer