NSNotificationCenter: сколько времени занимает операция - PullRequest
1 голос
/ 29 октября 2010

Я хочу знать, сколько времени занимает отправка уведомления и получение уведомления.

Причина в том, что я хочу выяснить, подходит ли мне схема наблюдателя. Я не хочу, чтобы другой контроллер представления мог изменить значение до того, как уведомление было отправлено и обработано. Я боюсь, что другой процесс (поток?) Быстрее, и значение будет перезаписано, когда это не должно.

Ответы [ 2 ]

4 голосов
/ 29 октября 2010

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

Есть несколько дополнительных вещей, о которых вам нужно знать:

Уведомленияполучены в той же ветке, в которой они размещены.Если вы переместите уведомление в основной поток с помощью performSelectorOnMainThread:withObject:waitUntilDone:, вы можете прервать синхронное поведение, если для waitUntilDone установлено значение NO.Если для waitUntilDone установлено значение YES, поток, передающий уведомление, будет блокироваться до тех пор, пока основной поток не завершит выполнение указанного действия.

Нет гарантии порядка, в котором уведомление будет полученоего наблюдатели.Если в одном уведомлении есть несколько наблюдателей, не полагайтесь на тех наблюдателей, которые получают уведомление в каком-либо конкретном порядке.

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

0 голосов
/ 29 октября 2010

вы можете использовать enqueueNotification для более точного контроля над обработкой уведомлений, но, в конце концов, я считаю, что вы можете столкнуться с той же проблемой, о которой выражали беспокойство, независимо от того, реализована ли NotificationCenter или нет1003 *

...