0

私はviewcontrollerを持っています。その中にnsnotificationオブザーバーがあります。別のビューコントローラーから通知を投稿していますが、nsnotification オブザーバー セレクターが 2 回、場合によっては 3 回起動されます。私の質問は、[view removeFromSuperview]; を使用するときです。このviewcontrollersビューを削除するには、通知オブザーバーが削除されていますか? viewcontroller クラスの dealloc メソッドでこのメソッドを指定しました

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

}
4

2 に答える 2

2

いいえ。

そのメソッドは、viewcontrollers 保持カウントが 0 になると呼び出されます

ビューが他のビューコントローラーから削除されたときに呼び出される別のメソッドを追加して、呼び出す必要があります

[[NSNotificationCenter defaultCenter] removeObserver:self];

セレクターが複数回呼び出されるという問題については、さらにコードを確認する必要があります。通知を投稿するコード行が複数回呼び出されていないことを確認してください。

于 2011-11-25T18:47:09.540 に答える
1

NSNotification単一のビューやビューコントローラーではなく、アプリ全体 (またはすべてのオペレーティング システム) に登録されます。オブザーバーが使用されなくなった場合は、アクションでオブザーバーを削除する必要があります。この場合、投稿された通知を 1 つだけ処理できます。

于 2011-11-25T18:43:49.323 に答える