2016-03-07 2 views
0

Я не хочу добавлять наблюдателя в viewDidAppear и удалять в viewDidDisappear.Will не обслуживает мой случай.Где удалить наблюдателя для NSNotificationCenter в Objective-C

Я попытался сделать это в dealloc.

My root VC находится в navController. Затем второй VC помещается в navController, где я добавляюObserver для отправки уведомлений от rootVC. Проблема заключается в том, что когда я pop второй VC, его dealloc не вызывается немедленно или может быть не так, называемый alltogether.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newMessagesNotification:) name:_newMessageNotificationListenerName object:nil]; 
} 

- (void)newMessagesNotification:(NSNotification *)notification { 
//some implementation 
} 
+2

Почему бы не 'viewDidDisappear'? Если 'dealloc' не вызывается, то что-то держит ссылку на контроллер вида. – Paulw11

+0

Не в видуDidDisappear, потому что я приношу еще один VC по модулю в secondVC. Один может поспорить, если поставить conditons в viewDidDisappear. Но я ищу конкретное яблоко, предлагающее способ удалить наблюдателя в VC –

+0

Dealloc. Вам нужно разобраться, что держит ссылку – Paulw11

ответ

0

Если вы не хотите, чтобы удалить в ViewDidDisapear, чем я думаю, вы должны удалить его сразу же после того, как вы назвали поп-Methode navigationCotnroller. Но я думаю, что мы не можем сказать вам точный момент, когда вам следует удалить, потому что мы не знаем, когда вы хотите его удалить, и почему это не хорошо в ViewWillDisapier или в ViewDidDisapier.

+0

Я вызываю popToRootVc из других контроллеров. Привет, меня больше интересовал метод dealloc. Я хочу назвать его, как только я удалю secondVC из стека навигации. Пожалуйста, прочитайте мои комментарии о том, почему не в ViewWillDisappear. –