Запрос addobserver / removeobserver

Можно ли использовать -removeObserver: сначала, а затем позвоните -addObserver: с таким же именем? Или это правило иметь -addObserver: сначала до -removeObserver:?

Я попробовал это с использованием OS 4.0, и, кажется, все в порядке (без сбоев, предупреждений... и т.д.).

-(void) setObserver
{
[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:OBSERVER_NAME object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector: @selector(selectorName)
                                             name:OBSERVER_NAME 
                                           object:nil]; 
}

Причина в том, чтобы помешать двум наблюдателям с одинаковыми selectorName метод вызывается дважды, предполагая, что -setObserver метод был вызван снова, если его внутри -viewDidLoad и предупреждение памяти было выпущено.

Кроме того, мне нужно вызвать -removeObserver: в течение -dealloc?

1 ответ

Если вы получаете -selectorName Вызванный дважды, возможно, есть другая проблема с вашим кодом. И даже если Какао будет грациозно удалить наблюдателей, которых вы еще не добавили, я бы не стал этого делать.

Как говорит пользователь tonklon в комментарии, вы, вероятно, должны удалить наблюдателя в -viewDidUnload, Что касается вашего последнего вопроса, также разумно удалить наблюдателя в -deallocхотя хорошая практика состоит в том, чтобы структурировать ваш код так, чтобы такие вещи, как удаление наблюдателей, происходили в детерминированное время, а не как побочный эффект управления памятью.

Другие вопросы по тегам