Добавление наблюдателя в NSNotificationCenter во второй раз вызывает EXC_BAD_ACCESS - PullRequest
3 голосов
/ 25 марта 2011

Гипотетический сценарий:

В моем методе viewDidLoad я добавляю контроллер представления в качестве наблюдателя для настраиваемого уведомления (скажем, уведомления MyFooNotification).Позже в процессе загрузки представления уведомление публикуется, и контроллер обрабатывает его.Когда я оставляю контроллер в поле зрения, я НЕ удаляю наблюдателя (намеренно) в viewDidUnload.В следующий раз, когда открывается представление, наблюдатель снова добавляется, но теперь, когда наблюдаемое уведомление публикуется - я получаю EXC_BAD_ACCESS.

Может кто-нибудь объяснить, почему это происходит.знаю, что я должен удалить его в viewDidUnload Мне просто интересно узнать подробности нижнего уровня.

1 Ответ

5 голосов
/ 25 марта 2011

Скорее всего, потому что исходный контроллер представления был освобожден, потому что он был извлечен из стека навигации (или подобного), но NSNotificationCenter все еще имеет ссылку на него.Таким образом, когда уведомление публикуется снова, NSNotificationCenter пытается уведомить освобожденный контроллер представления и в результате получает EXC_BAD_ACCESS.

Если у вас когда-либо есть объект, добавляющий себя в NSNotificationCenter как наблюдатель, убедитесь, что вы удалили его во время dealloc.

...