Для приложения в среде Cocoa предоставляется единственный экземпляр класса NSNotif icationCenter, неофициально называемый центром уведомлений и доступный в виде [NSNotificationCenter defaultCenter].

Этот экземпляр служит основанием для механизма отправки сообщений, называемых уведомлениями. В уведомление входит экземпляр класса NSNotif ication (объект уведомления). Основная идея состоит в том, что любой объект может быть зарегистрирован в центре уведомлений для получения определенных уведомлений. Другой объект может передать объект уведомления в центр уведомлений для дальнейшей отправки (или так называемой рассылки). После этого центр уведомлений разошлет этот объект уведомления (в самом уведомлении) всем объектам, зарегистрированным для его получения.

Механизм уведомлений нередко описывается как отправляющий или широковещательный, и на то имеются веские основания. Ведь он позволяет отправить объекту сообщение, не зная и даже не интересуясь, какие объекты принимают сообщение и сколько их вообще имеется. Благодаря этому архитектура приложения освобождается от формальной ответственности за такое подключение экземпляров, чтобы сообщение можно было передавать от одного из них к другому, что иногда может оказаться сложным и трудным делом, как поясняется в главе 13. Когда объекты принципиально удалены друг от друга, уведомления могут стать довольно простым способом обмена сообщениями между такими объектами.

Объект типа NSNotif ication содержит следующие три фрагмента данных, которые связаны с ним и могут быть извлечены с помощью методов экземпляра.

 

name

Это объект типа NSString, обозначающий смысловое содержание уведомления.

object

Это экземпляр, связанный с уведомлением (как правило, экземпляр, пославший его).

userlnfo

Этот фрагмент данных включается далеко не во всякое уведомление. Он представляет собой словарь типа NSDictionary и может содержать дополнительные сведения об уведомлении. Данные, которые может содержать словарь userlnfo типа NSDictionary, а также те ключи, под которыми они могут храниться в этом словаре, зависят от конкретного уведомления, поэтому обращайтесь за дополнительной справкой к документации. Например, в документации сообщается, что уведомление UIApplicationDidCha ngeStatusBarFrameNotif ication из класса UIApplication включает в себя словарь userlnfo с ключом UIApplicationStatusBarFrameUserlnfoKey, значение которого обозначает фрейм строки состояния. Если вы рассылаете уведомление самостоятельно, то можете ввести в словарь userlnfo какие угодно данные, чтобы их извлекли получатели уведомления.

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


 

 

 

Добавить комментарий