Принимаются ли события NSNotificationCenter синхронно или асинхронно?
Если класс регистрирует события NSNotificationCenter
определенного типа, а другой класс отправляет событие такого типа, будет ли код в приемнике выполняться раньше (синхронно) или после (асинхронно) класса проводки?
- (void)poster {
[[NSNotificationCenter defaultCenter]
postNotificationWithName:@"myevent"
object:nil];
NSLog(@"Hello from poster");
}
- (void)receiver {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector:(mySelector)
name:@"myevent"
object:nil];
}
- (void) mySelector:(NSNotification *) notification {
NSLog(@"Hello from receiver");
}
В приведенном выше примере кода будет ли "Hello from receiver" распечатываться до или после "Hello from caller"?
Ответы
Ответ 1
Как указано в документации для NSNotificationCenter, ссылки на класс NSNotificationCenter отправляются синхронно.
Центр уведомлений доставляет уведомления наблюдателям синхронно. Другими словами, методы postNotification: не возвращаются до тех пор, пока все наблюдатели не получат и не обработают уведомление. Для отправки уведомлений асинхронно используйте NSNotificationQueue.
В многопоточном приложении уведомления всегда доставляются в потоке, в котором было опубликовано уведомление, что может быть не тем потоком, в котором наблюдатель зарегистрировался.
Надеюсь, это поможет вам.