Общий ответ будет «как только вам больше не нужны уведомления». Очевидно, это не удовлетворительный ответ.
Я бы рекомендовал вам добавить вызов [notificationCenter removeObserver: self]
в метод dealloc
тех классов, которые вы собираетесь использовать в качестве наблюдателей, поскольку это последний шанс полностью отменить регистрацию наблюдателя. Однако это защитит вас только от сбоев из-за уведомления центра уведомлений о мертвых объектах. Он не может защитить ваш код от получения уведомлений, когда ваши объекты еще не находятся / больше не находятся в состоянии, в котором они могут правильно обрабатывать уведомление. Для этого ... См. Выше.
Изменить (поскольку ответ, кажется, вызывает больше комментариев, чем я мог подумать) Все, что я пытаюсь сказать, это: действительно сложно дать общий совет относительно того, когда лучше всего удалить наблюдателя из центр уведомлений, потому что это зависит от:
- В вашем случае использования (какие уведомления наблюдаются? Когда они отправляются?)
- Реализация наблюдателя (когда он готов получать уведомления? Когда он больше не готов?)
- Предполагаемое время жизни наблюдателя (привязано ли оно к какому-то другому объекту, скажем, представлению или контроллеру представления?)
- ...
Итак, лучший общий совет, который я могу дать: защитите свое приложение. против хотя бы одного возможного отказа, сделайте removeObserver:
танец в dealloc
, поскольку это последний момент (в жизни объекта), где вы можете сделать это чисто. Это не означает: «просто отложите удаление до вызова dealloc
, и все будет хорошо». Вместо этого удалите наблюдателя , как только объект больше не будет готов (или не требуется) для получения уведомлений. Это как раз подходящий момент. К сожалению, не зная ответов ни на один из упомянутых выше вопросов, я даже не могу предположить, когда это произойдет.
Вы всегда можете безопасно removeObserver:
использовать объект несколько раз (и все вызовы данного наблюдателя, кроме самого первого, будут nops). Итак: подумайте о том, чтобы сделать это (снова) в dealloc
, чтобы быть уверенным, но прежде всего: сделайте это в подходящий момент (который определяется вашим вариантом использования).
person
Dirk
schedule
24.06.2011
-(void)dealloc
, а затем добавить в негоremoveObserser:self
. Это наиболее рекомендуемый способ поставитьremoveObservers:self
- person petershine   schedule 24.06.2011dealloc
в iOS 6? - person wcochran   schedule 23.05.2013