Это не столько вопрос, сколько предупреждение другим, чтобы сэкономить им время.
NSNotificationCenter на iOS 3 / iPhone OS 3 (я полагаю, также Mac OS X и iOS 4) имеет следующее поведение:
Если вы зарегистрируетесь несколько раз для получения точного конкретного уведомления, NSNotificationCenter NOT распознает избыточность и вместо этого сработает столько уведомлений, сколько вы зарегистрировали для наблюдения.
Это почти никогда не то поведение, которое вы хотите увидеть, и почти всегда случайное.
Пример:
Я хочу, чтобы мой контроллер вида получал уведомления от одноэлементного сетевого объекта при поступлении новых данных:
- (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, я получу дубликаты уведомлений на мой контроллер представления.
В многопоточной среде это мир боли. Поверь мне.
Просто выкладываю это на случай, если есть другие, которые сталкиваются с чем-то вроде этого.