4

UIApplication 通知のオブザーバーをいつ追加および削除する必要がありますか?

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(saveState) name:UIApplicationWillResignActiveNotification object:nil];
    [nc addObserver:self selector:@selector(loadState) name:UIApplicationWillEnterForegroundNotification object:nil];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:animated];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc removeObserver:self name:UIApplicationWillResignActiveNotification object:nil];
    [nc removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil];
}

これは悪いですか?ビューが画面に表示されているときの通知にのみ関心があります。UIApplicationWillEnterForegroundNotificationまた、viewWillDisappear:メソッド内のを削除しても問題はありませんか? 順番とか考えてる…?

4

1 に答える 1

1

- (id)init{}または別の一致する初期化子でそれを行い、代わり- (void)dealloc{}に。viewWillAppear および viewWillDisappear でオブザーバーを追加および削除すると、たとえば、モーダルを表示および非表示にするときに、不必要に複数回実行されます。

ARC を使用するプロジェクトでは、dealloc メソッドを引き続き実装できます。[super dealloc]手動保持/リリース プロジェクトで行ったように呼び出しを行わないでください。実際、コンパイラは許可しません。

于 2011-06-24T18:09:35.270 に答える