2011-06-24 3 views
4

UIApplication通知のオブザーバーをいつ追加して削除する必要がありますか?いつUIApplication Notificationsのオブザーバーを追加/削除する必要がありますか?

- (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]; 
} 

これは悪いですか?ビューが画面に表示されているときだけ通知に関心があります。 viewWillDisappear:メソッドのUIApplicationWillEnterForegroundNotificationを削除することに問題はありますか?私は物事が起こる順序を考えています...?

答えて

1

- (id)init{}または別の対応する初期化子で- (void)dealloc{}を実行してください。 viewWillAppearとviewWillDisappearでオブザーバを追加したり削除したりすると、モーダルを表示したり解除したりするときなどに不必要に複数回オブザーバが実行されます。

ARCを使用するプロジェクトの場合でも、引き続きdeallocメソッドを実装できます。 Manual Retain/Releaseプロジェクトと同様に、[super dealloc]に電話しないでください。実際には、コンパイラはあなたをさせません。

関連する問題