NSnotificationCenter postNotificationName кто является получателем?

Документация http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html говорит об отправителе и имени уведомления, но где упоминается, кому отправить это уведомление ?


person Namratha    schedule 11.02.2011    source источник


Ответы (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.

Не указано означает, что для этого поля было указано нулевое значение.

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

person Anurag    schedule 11.02.2011
comment
Не могли бы вы пояснить, что уведомления допускают слабосвязанный дизайн, поскольку объекты не связаны друг с другом в своих реализациях и могут работать независимо друг от друга. - person Namratha; 23.02.2011
comment
Кроме того, в addObserver:selector:name:object: я не понял параметр selector. Пожалуйста, объясни. - person Namratha; 23.02.2011
comment
Допустим, есть два класса A и B, и всякий раз, когда происходит какое-то событие, объект A должен уведомить объект B. Без уведомлений мы можем напрямую вызвать какой-либо метод B непосредственно из какого-либо метода A, тем самым связав оба класса вместе и создав жесткую зависимость. С помощью уведомлений A может просто сообщить диспетчеру уведомлений о том, что произошло событие, и если B прослушивает, то он уведомит об этом событии. Если нет, то событие просто останется незамеченным. Но в данном случае мы не связывали оба класса вместе. - person Anurag; 23.02.2011
comment
Параметр selector — это метод в объекте наблюдателя, который следует вызывать, когда это уведомление публикуется кем-либо. - person Anurag; 23.02.2011

notification – это механизм трансляции. Как и в документе, «Объекты регистрируются в центре уведомлений для получения уведомлений (объекты NSNotification) с использованием методов addObserver:selector:name:object: или addObserverForName:object:queue:usingBlock:». т. е. любой заинтересованный объект может зарегистрироваться в качестве слушателя.

person ohho    schedule 11.02.2011
comment
где я должен добавить этот оператор NSnotificaton в свой код? Должен ли я поместить его в функцию, которая должна быть слушателем? - person Namratha; 11.02.2011
comment
@Namratha Я предлагаю вам обратиться к образцу MoviePlayer developer.apple.com/library/ios/#samplecode/MoviePlayer_iPhone/ для справки. - person ohho; 11.02.2011