Центры уведомления
Центр уведомления управляет отправкой и получением уведомлений. Это уведомляет всех наблюдателей уведомлений, удовлетворяющих определенные критерии. Информация об уведомлении инкапсулируется в NSNotification
объекты. Объекты клиента регистрируют себя в центре уведомления как наблюдатели определенных уведомлений, отправленных другими объектами. Когда событие имеет место, объект отправляет надлежащее уведомление центру уведомления. (См. Регистрацию Уведомления для больше при регистрации уведомлений.) Центр уведомления диспетчеризирует сообщение каждому зарегистрированному наблюдателю, передавая уведомление как единственный параметр. Это возможно для объекта регистрации и объекта наблюдения быть тем же.
Какао включает два типа центров уведомления:
NSNotificationCenter
класс управляет уведомлениями в единственном процессе.NSDistributedNotificationCenter
класс управляет уведомлениями через многократные процессы на одиночном компьютере.
NSNotificationCenter
Каждый процесс имеет центр уведомления по умолчанию, к которому Вы получаете доступ с NSNotificationCenter +defaultCenter
метод класса. Этот центр уведомления обрабатывает уведомления в единственном процессе. Для коммуникации между процессами на той же машине используйте распределенный центр уведомления (см. NSDistributedNotificationCenter).
Центр уведомления поставляет уведомления наблюдателям синхронно. Другими словами, при регистрации уведомления, управление не возвращается к плакату, пока все наблюдатели не получили и обработали уведомление. Для отправки уведомлений асинхронно используют очередь уведомления, описанную в Очередях Уведомления.
В многопоточном приложении уведомления всегда поставляются в потоке, в котором было отправлено уведомление, который может не быть тем же потоком, в котором наблюдатель зарегистрировал себя.
NSDistributedNotificationCenter
Каждый процесс имеет распределенный центр уведомления значения по умолчанию, к которому Вы получаете доступ с NSDistributedNotificationCenter +defaultCenter
метод класса. Этот распределенный центр уведомления обрабатывает уведомления, которые могут быть отправлены между процессами на единственной машине. Для коммуникации между процессами на различных машинах используйте распределенные объекты (см. Распределенные Объекты Программировать Темы).
Регистрация распределенного уведомления является дорогой работой. Уведомление отправляется в сервер в масштабе всей системы, тогда распределяющий его всем процессам, имеющим объекты, зарегистрированные для распределенных уведомлений. Задержка между регистрацией уведомления и поступлением уведомления в другой процесс неограниченна. Фактически, если слишком много уведомлений отправляются, и очередь сервера заполняется, уведомления могут быть отброшены.
Распределенные уведомления поставлены через цикл выполнения процесса. Процесс должен выполнять цикл выполнения в одном из «общих» режимов, такой как NSDefaultRunLoopMode
, получить распределенное уведомление. Если процесс получения многопоточен, не зависьте от уведомления, поступающего в основной поток. Уведомление обычно поставляется циклу выполнения основного потока, но другие потоки могли также получить уведомление.
Принимая во внимание, что регулярный центр уведомления позволяет любому объекту наблюдаться, распределенный центр уведомления ограничивается наблюдением строкового объекта. Поскольку объект регистрации и наблюдатель могут быть в различных процессах, уведомления не могут содержать указатели на произвольные объекты. Поэтому распределенный центр уведомления требует, чтобы уведомления использовали строку в качестве объекта уведомления. Уведомление, соответствующее, сделано на основе этой строки, а не объектного указателя.