0

このコードは以下の にありますUIViewController。それは理にかなっていますか?

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)viewDidUnload {
    [super viewDidUnload];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

それとも、dealloc コードで十分でしょうか?

4

4 に答える 4

1

deallocオブジェクトをオブザーバーとして通知に追加しても参照アカウントが増加しないため、内部に保持するだけで十分です。他の参照が保持されていない限り、View Controller はdealloc親の View Controller から削除されるときに編集されます。

実際、それを置く場所viewDidUnloadは間違いなく間違っています。このメソッドが呼び出されることはめったになく、iOS6 以降では非推奨となり、まったく呼び出されません。

于 2013-08-01T20:41:46.880 に答える
1

でのみremoveObserver通話を行う必要がありますdeallocviewDidUnload呼び出されることはまったく保証されていません (実際、iOS6 では廃止されています)。 deallocビューコントローラーへのすべての参照がなくなると、最終的に呼び出されます。

于 2013-08-01T20:41:54.453 に答える
1

オブザーバーを削除することdeallocはセーフティネットであり、セーフティネットが必要です。viewDidUnloadは iOS6 では廃止されているため、古いバージョンの iOS でのみ使用されます。一般に、自分自身をオブザーバーとして追加した場所に対応するメソッドで、自分自身をオブザーバーとして削除することを確認する必要があります (ビューの表示と非表示など)。

于 2013-08-01T20:42:02.553 に答える
1

viewDidUnload は廃止されました。iOS は、メモリに負荷がかかる条件下で viewDidUnload を呼び出します。ARC でこのメソッドを使用する必要はありません。

于 2013-08-01T20:42:52.677 に答える