Когда UIViewController должен добавлять / удалять наблюдателей в NSNotificationCenter? - PullRequest
12 голосов
/ 30 сентября 2011

Если я добавлю наблюдателя к [NSNotificationCenter defaultCenter] в моем viewDidLoad, я должен удалить его в viewDidUnload?

Ответы [ 3 ]

11 голосов
/ 30 сентября 2011

Если вам нужно , чтобы добавить их в инициализатор, вы должны удалить его методом dealloc.В идеале, вы должны заботиться об этих уведомлениях только тогда, когда вы находитесь на экране или нет.

Методы viewDid[Appear|Disappear] можно вызывать несколько раз в течение срока действия UIViewController.Зарегистрируйтесь для получения уведомления в методе viewDidAppear и отмените его регистрацию в viewDidDisappear.

8 голосов
/ 30 сентября 2011

Вы должны удалить его методом dealloc.

0 голосов
/ 30 сентября 2011

Мне кажется, viewDidUnload - это то место, куда его можно поставить.

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

Во-вторых, что произойдет, если вы не удалитеObserver в viewDidUnload, и viewDidLoad будет вызван снова? Вы снова вызываете addObserver. Вероятно, не повредит, центр уведомлений может обнаружить дубликаты добавлений.

...