Это не столько вопрос, сколько предупреждение для других, чтобы сэкономить время.
NSNotificationCenter на iOS 3 / iPhone OS 3 (я предполагаю, также Mac OS X и iOS 4) имеет следующее поведение:
Если вы зарегистрируетесь несколько раз для получения конкретного уведомления, NSNotificationCenter НЕ распознает избыточность и вместо этого отправит вам столько уведомлений, сколько вы зарегистрировали для наблюдения.
Это почти никогда не бывает тем поведением, которое вы хотите видеть, и почти всегда бывает случайным.
Пример:
Я хочу, чтобы мой контроллер представления получал уведомления от одноэлементного сетевого объекта при поступлении новых данных:
- (void) viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newDataArrived:)
name:NewDataArrivedNotification
object:[NetworkListener sharedNetworkListener]];
}
но раньше я уже вставлял то же самое в viewWillAppear
:
- (void) viewWillAppear
{
[super viewWillAppear];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(newDataArrived:)
name:NewDataArrivedNotification
object:[NetworkListener sharedNetworkListener]];
}
Обратите внимание, что это точно одно и то же уведомление, относящееся к одному и тому же наблюдателю, отправителю и имени уведомления.
В этом случае, если я не удалю один из этих вызовов addObserver, я получу дублирующиеся уведомления на свой контроллер представления.
В многопоточной среде это мир боли. Поверьте мне.
Просто выложите это на случай, если есть другие, которые столкнутся с чем-то вроде этого.