回答:
deinit {
// perform the deinitialization
}
Swiftのドキュメントから:
クラスインスタンスが割り当て解除される直前にdeinitializerが呼び出されます。ininitializerがinitキーワードで書き込まれるのと同様に、deinitializerはdeinitキーワードで記述します。デイニシャライザは、クラスタイプでのみ使用できます。
通常、インスタンスの割り当てが解除されたときに手動でクリーンアップを実行する必要はありません。ただし、独自のリソースで作業している場合は、追加のクリーンアップを自分で実行する必要がある場合があります。たとえば、ファイルを開いてデータを書き込むカスタムクラスを作成する場合、クラスインスタンスの割り当てを解除する前にファイルを閉じる必要がある場合があります。
deinit {
// perform the deinitialization
}
Swiftの「dealloc」の正解です。
ただし、iOS 9の新機能として、NSNotificationCenterをクリーンアップする必要がないことを指摘しておくとよいでしょう。
NSNotificationCenter
OS X 10.11およびiOS 9.0では、NSNotificationCenterおよびNSDistributedNotificationCenterは、割り当て解除された可能性がある登録オブザーバーに通知を送信しなくなりました。オブザーバーをゼロ化-弱い参照として保存できる場合、基礎となるストレージはオブザーバーをゼロ化する弱い参照として保存します。オブジェクトが弱い保存ができない場合(つまり、ランタイムを妨げるカスタムの保持/解放メカニズムがある場合)オブジェクトを弱く保存できないため)、オブジェクトを非弱いゼロ化参照として保存します。これは、オブザーバーが割り当て解除メソッドで登録を解除する必要がないことを意味します。そのオブザーバーにルーティングされる次の通知は、ゼロ化された参照を検出し、オブザーバーの登録を自動的に解除します。オブジェクトを弱く参照できる場合、割り当て解除中に通知がオブザーバーに送信されなくなります。dealloc中に通知を受信するという以前の動作は、弱くないゼロの参照オブザーバーの場合でも存在します。-[NSNotificationCenter addObserverForName:object:queue:usingBlock]メソッドを介したブロックベースのオブザーバーは、システムがこれらのオブザーバーへの強い参照を保持しているため、使用されなくなった場合でも登録解除する必要があります。オブザーバー(弱参照またはゼロ参照のいずれか)を時期尚早に削除することは引き続きサポートされています。CFNotificationCenterAddObserverは、オブザーバーがオブジェクトではない可能性があるため、この動作に準拠していません。-[NSNotificationCenter addObserverForName:object:queue:usingBlock]メソッドを介したブロックベースのオブザーバーは、システムがこれらのオブザーバーへの強い参照を保持しているため、使用されなくなった場合でも登録解除する必要があります。オブザーバー(弱参照またはゼロ参照のいずれか)を時期尚早に削除することは引き続きサポートされています。CFNotificationCenterAddObserverは、オブザーバーがオブジェクトではない可能性があるため、この動作に準拠していません。-[NSNotificationCenter addObserverForName:object:queue:usingBlock]メソッドを介したブロックベースのオブザーバーは、システムがこれらのオブザーバーへの強い参照を保持しているため、使用されなくなった場合でも登録解除する必要があります。オブザーバー(弱参照またはゼロ参照のいずれか)を時期尚早に削除することは引き続きサポートされています。CFNotificationCenterAddObserverは、オブザーバーがオブジェクトではない可能性があるため、この動作に準拠していません。
ただし、強い参照に関する以下の点に注意してください。とにかくクリーンアップについて心配する必要があるかもしれません...?
Swiftは、不要になったインスタンスを自動的に割り当て解除して、リソースを解放します。自動参照カウントで説明されているように、Swiftは自動参照カウント(ARC)を通じてインスタンスのメモリ管理を処理します。通常、インスタンスの割り当てが解除されたときに手動でクリーンアップを実行する必要はありません。ただし、独自のリソースで作業している場合は、追加のクリーンアップを自分で実行する必要がある場合があります。たとえば、ファイルを開いてデータを書き込むカスタムクラスを作成する場合、クラスインスタンスの割り当てを解除する前にファイルを閉じる必要がある場合があります。
クラス定義は、クラスごとに最大1つの非初期化子を持つことができます。デイニシャライザはパラメータを取らず、括弧なしで記述されます。
deinit { // perform the deinitialization }
deinitから他のクラスのメソッドを呼び出すときは、おそらくクラッシュすることに注意してください