Документация http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html говорит об отправителе и имени уведомления, но где упоминается, кому отправить это уведомление ?
NSnotificationCenter postNotificationName кто является получателем?
Ответы (2)
Вы не отправляете уведомление напрямую кому-то. Имя уведомления и отправитель определяют, кто получит уведомление.
Заинтересованные объекты могут подписаться на уведомление. Когда вы публикуете уведомление, все подписчики, которые слушают уведомление с таким именем, получат уведомление. На самом деле уведомления Cocoa можно настроить на двух уровнях:
- имя уведомления (строка)
- отправитель
документация класса наглядно это иллюстрирует.
Вот небольшая таблица ASCII из документов, показывающая, кто получает уведомления в зависимости от того, какое имя уведомления и отправитель использовались при создании:
Notification name | Notification sender | Notification set specified -------------------------------------------------------------------- Specified | Specified | Notifications with a particular name from a specific sender. Specified | Unspecified | Notifications with a particular name by any sender. Unspecified | Specified | Notifications posted by a specific sender. Unspecified | Unspecified | All notifications.
Не указано означает, что для этого поля было указано нулевое значение.
Уведомления допускают слабосвязанный дизайн, поскольку объекты не связаны друг с другом в своих реализациях и могут работать независимо друг от друга.
A
и B
, и всякий раз, когда происходит какое-то событие, объект A
должен уведомить объект B
. Без уведомлений мы можем напрямую вызвать какой-либо метод B
непосредственно из какого-либо метода A
, тем самым связав оба класса вместе и создав жесткую зависимость. С помощью уведомлений A
может просто сообщить диспетчеру уведомлений о том, что произошло событие, и если B
прослушивает, то он уведомит об этом событии. Если нет, то событие просто останется незамеченным. Но в данном случае мы не связывали оба класса вместе.
- person Anurag; 23.02.2011
selector
— это метод в объекте наблюдателя, который следует вызывать, когда это уведомление публикуется кем-либо.
- person Anurag; 23.02.2011
notification
– это механизм трансляции. Как и в документе, «Объекты регистрируются в центре уведомлений для получения уведомлений (объекты NSNotification) с использованием методов addObserver:selector:name:object: или addObserverForName:object:queue:usingBlock:». т. е. любой заинтересованный объект может зарегистрироваться в качестве слушателя.