Подтвердить что ты не робот

Принимаются ли события 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"?

4b9b3361

Ответ 1

Как указано в документации для NSNotificationCenter, ссылки на класс NSNotificationCenter отправляются синхронно.

Центр уведомлений доставляет уведомления наблюдателям синхронно. Другими словами, методы postNotification: не возвращаются до тех пор, пока все наблюдатели не получат и не обработают уведомление. Для отправки уведомлений асинхронно используйте NSNotificationQueue.

В многопоточном приложении уведомления всегда доставляются в потоке, в котором было опубликовано уведомление, что может быть не тем потоком, в котором наблюдатель зарегистрировался.

Надеюсь, это поможет вам.