Последовательность выполнения при размещении двух NSNotification - PullRequest
1 голос
/ 02 марта 2011

Быстрый вопрос о NSNotification ... Если я отправляю два NSNotifications в методе, и они наблюдаются разными объектами, какова последовательность выполнения метода селектора?

Например, если у меня есть три контроллера - Poster, Receiver A и Receiver B. В функции контроллера Poster я делаю следующее:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ReceiverADoSomething" object:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReceiverBDoSomething" object:self];

В методе viewDidLoad для получателя A:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(workToDoByA:) name:@"ReceiverADoSomething" object:nil];

В методе viewDidLoad для получателя B:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(workToDoByB:) name:@"ReceiverADoSomething" object:nil];

Сначала будет workToDoByA, а затем workToDoByB? Или они будут казнены вместе?

Другой сценарий ... Если у меня есть постер А, который публикует уведомление, но есть два наблюдателя в ЖЕ ЖЕ уведомлении. Какова последовательность выполнения?

Заранее спасибо за помощь.

1 Ответ

4 голосов
/ 27 сентября 2011

Выдержка из документов Apple:

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

та же политика для postNotificationName.

...