Запрос 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
хотя хорошая практика состоит в том, чтобы структурировать ваш код так, чтобы такие вещи, как удаление наблюдателей, происходили в детерминированное время, а не как побочный эффект управления памятью.