Ссылка CFNotificationCenter
Объект CFNotificationCenter обеспечивает средние значения, которыми можно отправить сообщение или уведомление, к любому числу получателей или наблюдателей, не имея необходимость знать что-либо о получателях. Уведомление состоит из имени уведомления (CFString), значение указателя, идентифицирующее объект, отправляющий уведомление и дополнительный словарь, содержащий дополнительную информацию об определенном уведомлении.
Для регистрации как наблюдатель уведомления Вы вызываете CFNotificationCenterAddObserver
, предоставляя идентификатор Вашему наблюдателю, функция обратного вызова, которую нужно вызвать, когда уведомление отправляется, и имя уведомления и объекта, которым Вы интересуетесь. Идентификатор наблюдателя пасуется назад к функции обратного вызова, вместе с информацией об уведомлении. Можно использовать идентификатор для различения многократных наблюдателей, использующих ту же функцию обратного вызова. Идентификатор также используется, чтобы не зарегистрировать наблюдателя в CFNotificationCenterRemoveObserver
и CFNotificationCenterRemoveEveryObserver
.
Для отправки уведомления Вы вызываете CFNotificationCenterPostNotification
, передача в информации об уведомлении. Центр уведомления тогда ищет всех наблюдателей, зарегистрировавшихся для этого уведомления и отправляющих информацию об уведомлении в их функции обратного вызова.
Существует три типа CFNotificationCenter — распределенный центр уведомления, локальный центр уведомления, и Дарвинский центр уведомления — приложение может иметь самое большее один из каждого типа. Распределенное уведомление получено с CFNotificationCenterGetDistributedCenter
. Распределенный центр уведомления поставляет уведомления между приложениями. В этом случае объект уведомления должен всегда быть объектом CFString, и словарь уведомления должен содержать только значения списка свойств. Локальная переменная и Дарвинские центры уведомления доступны в версии 10.4 OS X и позже, и полученное использование CFNotificationCenterGetLocalCenter
и CFNotificationCenterGetDarwinNotifyCenter
соответственно.
В отличие от некоторой другой Базовой Основы непрозрачные типы с именами, подобными Фундаментальному классу Какао (такими как CFString и NSString
), объекты CFNotificationCenter не могут быть брошены (“бесплатный соединенный мостом”) к NSNotificationCenter
объекты или наоборот.
-
Возвращает Дарвинский центр уведомления приложения.
Объявление
Swift
func CFNotificationCenterGetDarwinNotifyCenter() -> CFNotificationCenter!
Objective C
CFNotificationCenterRef CFNotificationCenterGetDarwinNotifyCenter ( void );
Возвращаемое значение
Дарвинский центр уведомления приложения.
Обсуждение
Этот центр уведомления используется для покрытия
<notify.h>
Базовый механизм уведомления OS (см./usr/include/notify.h
). Приложение имеет только один Дарвинский центр уведомления, таким образом, эта функция возвращает то же значение каждый раз, когда это вызывают.Дарвин Уведомляет, что Центр не имеет никакого понятия сеансов в расчете на пользователя, все уведомления в масштабе всей системы. Как с распределенными уведомлениями, цикл выполнения основного потока должен работать в одном из общих режимов (обычно
kCFRunLoopDefaultMode
) для уведомлений дарвинского стиля, которые будут поставлены.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.4 и позже.
-
Возвращает распределенный центр уведомления приложения.
Объявление
Swift
func CFNotificationCenterGetDistributedCenter() -> CFNotificationCenter!
Objective C
CFNotificationCenterRef CFNotificationCenterGetDistributedCenter ( void );
Возвращаемое значение
Распределенный центр уведомления приложения. Приложение имеет только один распределенный центр уведомления, таким образом, эта функция возвращает то же значение каждый раз, когда это вызывают.
Обсуждение
Распределенный центр уведомления поставляет уведомления между приложениями. Объект уведомления, используемый с распределенным центром уведомления, должен всегда быть объектом CFString, и словарь уведомления должен содержать только значения списка свойств.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Возвращает локальный центр уведомления приложения.
Объявление
Swift
func CFNotificationCenterGetLocalCenter() -> CFNotificationCenter!
Objective C
CFNotificationCenterRef CFNotificationCenterGetLocalCenter ( void );
Возвращаемое значение
Локальный центр уведомления приложения. Приложение имеет только один локальный центр уведомления, таким образом, эта функция возвращает то же значение каждый раз, когда это вызывают.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.4 и позже.
-
Отправляет уведомление для объекта.
Объявление
Swift
func CFNotificationCenterPostNotification(_
center
: CFNotificationCenter!, _name
: CFString!, _object
: UnsafePointer<Void>, _userInfo
: CFDictionary!, _deliverImmediately
: Boolean)Objective C
void CFNotificationCenterPostNotification ( CFNotificationCenterRef center, CFStringRef name, const void *object, CFDictionaryRef userInfo, Boolean deliverImmediately );
Параметры
center
Центр уведомления для регистрации уведомления.
name
Имя уведомления сообщению. Это значение не должно быть
NULL
.object
Объект, отправляющий уведомление. Если
NULL
, уведомление отправляется только наблюдателям, наблюдающим все объекты. Другими словами, только наблюдатели, зарегистрировавшиеся для уведомления в aNULL
значение дляobject
получит уведомление.Если Вы хотите позволить Вашим клиентам регистрироваться для уведомлений с помощью Какао APIs (см. Ссылку класса NSNotificationCenter), то
object
должен быть Базовый объект Основы или Какао.Для распределенных уведомлений,
object
должен быть объект CFString.Если
center
Дарвинский центр уведомления, это значение проигнорировано.userInfo
Словарь передал наблюдателям. Вы заполняете этот словарь с дополнительной информацией, описывающей уведомление. Для распределенных уведомлений словарь должен содержать только объекты списка свойств. Это значение может быть
NULL
.Если
center
Дарвинский центр уведомления, это значение проигнорировано.deliverImmediately
Если
true
, уведомление сразу поставлено всем наблюдателям, даже если некоторые наблюдатели находятся в приостановленных (фоновых) приложениях, и они запросили различное поведение приостановки при регистрации для уведомления. Еслиfalse
, требуемое поведение приостановки каждого наблюдателя уважают.Если
center
Дарвинский центр уведомления, это значение проигнорировано.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
CFNotificationCenterPostNotificationWithOptions (_: _: _: _: _:) CFNotificationCenterPostNotificationWithOptions
Отправляет уведомление для объекта с помощью указанных опций.
Объявление
Swift
func CFNotificationCenterPostNotificationWithOptions(_
center
: CFNotificationCenter!, _name
: CFString!, _object
: UnsafePointer<Void>, _userInfo
: CFDictionary!, _options
: CFOptionFlags)Objective C
void CFNotificationCenterPostNotificationWithOptions ( CFNotificationCenterRef center, CFStringRef name, const void *object, CFDictionaryRef userInfo, CFOptionFlags options );
Параметры
center
Центр уведомления для регистрации уведомления.
name
Имя уведомления сообщению. Это значение не должно быть
NULL
.object
Объект, отправляющий уведомление. Если
NULL
, уведомление отправляется только наблюдателям, наблюдающим все объекты. Другими словами, только наблюдатели, зарегистрировавшиеся для уведомления в aNULL
значение дляobject
получит уведомление.Если Вы хотите позволить Вашим клиентам регистрироваться для уведомлений с помощью Какао APIs (см. Ссылку класса NSNotificationCenter), то
object
должен быть Базовый объект Основы или Какао.Для распределенных уведомлений,
object
должен быть объект CFString.Если
center
Дарвинский центр уведомления, это значение проигнорировано.userInfo
Словарь, чтобы передать наблюдателям. Вы заполняете этот словарь с дополнительной информацией, описывающей уведомление. Для распределенных уведомлений словарь должен содержать только объекты списка свойств. Может быть
NULL
.Если
center
Дарвинский центр уведомления, это значение проигнорировано.options
Указывает, должно ли уведомление быть сразу отправлено, или ко всем сеансам. См., что Уведомление Отправляет Опции для возможных значений.
Если
center
Дарвинский центр уведомления, это значение проигнорировано.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.3 и позже.
-
Регистрирует наблюдателя для получения уведомлений.
Объявление
Swift
func CFNotificationCenterAddObserver(_
center
: CFNotificationCenter!, _observer
: UnsafePointer<Void>, _callBack
: CFNotificationCallback, _name
: CFString!, _object
: UnsafePointer<Void>, _suspensionBehavior
: CFNotificationSuspensionBehavior)Objective C
void CFNotificationCenterAddObserver ( CFNotificationCenterRef center, const void *observer, CFNotificationCallback callBack, CFStringRef name, const void *object, CFNotificationSuspensionBehavior suspensionBehavior );
Параметры
center
Центр уведомления, к которому можно добавить наблюдателя.
observer
Наблюдатель. В OS X v10.3 и позже, этот параметр может быть
NULL
.callBack
Функция обратного вызова для вызова, когда
object
отправляет названное уведомлениеname
.name
Имя уведомления для наблюдения. Если
NULL
,callback
вызывается для любого уведомления, отправленногоobject
.Если
center
Дарвинский центр уведомления, это значение не должно бытьNULL
.object
Объект наблюдать. Для распределенных уведомлений,
object
должен быть объект CFString. ЕслиNULL
,callback
когда уведомление назвало, вызываетсяname
отправляется любым объектом.Если
center
Дарвинский центр уведомления, это значение проигнорировано.suspensionBehavior
Флаг, указывающий, как уведомления должны быть обработаны, когда приложение в фоновом режиме. Посмотрите Поведение Приостановки Поставки Уведомления для списка доступных значений.
Если
center
Дарвинский центр уведомления, это значение проигнорировано.Обсуждение
Поставка уведомления регистрируется для основного потока.
Если необходимо управлять, какой поток обрабатывает уведомление, функция обратного вызова должна быть в состоянии переслать уведомление к надлежащему потоку. Можно использовать a
CFMessagePort
возразите или пользовательскоеCFRunLoopSource
объект отправить уведомления циклу выполнения корректного потока.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
См. также
-
Мешает наблюдателю получить любые уведомления от любого объекта.
Объявление
Swift
func CFNotificationCenterRemoveEveryObserver(_
center
: CFNotificationCenter!, _observer
: UnsafePointer<Void>)Objective C
void CFNotificationCenterRemoveEveryObserver ( CFNotificationCenterRef center, const void *observer );
Параметры
center
Центр уведомления, из которого можно удалить наблюдателей.
observer
Наблюдатель. Это значение не должно быть
NULL
.Обсуждение
Если Вы больше не хотите, чтобы наблюдатель получил какие-либо уведомления, возможно потому что наблюдатель освобождается, можно вызвать эту функцию, чтобы не зарегистрировать наблюдателя из всех уведомлений, для которых она ранее зарегистрировалась.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Мешает наблюдателю получить определенные уведомления.
Объявление
Swift
func CFNotificationCenterRemoveObserver(_
center
: CFNotificationCenter!, _observer
: UnsafePointer<Void>, _name
: CFString!, _object
: UnsafePointer<Void>)Objective C
void CFNotificationCenterRemoveObserver ( CFNotificationCenterRef center, const void *observer, CFStringRef name, const void *object );
Параметры
center
Центр уведомления для изменения.
observer
Наблюдатель. Это значение не должно быть
NULL
.name
Имя уведомления, чтобы прекратить наблюдать. Если
NULL
,observer
остановки, получающие обратные вызовы для всех уведомлений, отправленныхobject
.object
Объект прекратить наблюдать. Для распределенных уведомлений,
object
должен быть объект CFString. ЕслиNULL
,observer
остановки, получающие обратные вызовы для всех объектов, отправляющих уведомления, называютname
.Если
center
Дарвинский центр уведомления, это значение проигнорировано.Обсуждение
Если оба
name
иobject
NULL
, эта функция нерегистрыobserver
из всех уведомлений, для которых это ранее зарегистрировалось вcenter
.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Возвращает идентификатор типа для CFNotificationCenter непрозрачный тип.
Объявление
Swift
func CFNotificationCenterGetTypeID() -> CFTypeID
Objective C
CFTypeID CFNotificationCenterGetTypeID ( void );
Возвращаемое значение
Идентификатор типа для CFNotificationCenter непрозрачный тип.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Когда уведомление отправляется, функция обратного вызова вызвала для каждого наблюдателя уведомления.
Объявление
Swift
typealias CFNotificationCallback = CFunctionPointer<((CFNotificationCenter!, UnsafeMutablePointer<Void>, CFString!, UnsafePointer<Void>, CFDictionary!) -> Void)>
Objective C
typedef void (*CFNotificationCallback) ( CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo );
Параметры
center
Центр уведомления обработка уведомления.
observer
Произвольное значение, кроме
NULL
, это идентифицирует наблюдателя.name
Имя отправляемого уведомления.
object
Произвольное значение, идентифицирующее объект, отправляющий уведомление. Для распределенных уведомлений,
object
всегда объект CFString. Это значение могло бытьNULL
.userInfo
Словарь, содержащий дополнительную информацию относительно уведомления. Это значение могло быть
NULL
.Если центр уведомления является Дарвинским центром уведомления, это значение должно быть проигнорировано.
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Тип ссылки на CFNotificationCenter.
Объявление
Swift
typealias CFNotificationCenterRef = CFNotificationCenter
Objective C
typedef struct *CFNotificationCenterRef;
Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
Флаги приостановки, указывающие, как распределенные уведомления должны быть обработаны, когда приложение получения в фоновом режиме.
Объявление
Swift
enum CFNotificationSuspensionBehavior : CFIndex { case Drop case Coalesce case Hold case DeliverImmediately }
Objective C
enum CFNotificationSuspensionBehavior { CFNotificationSuspensionBehaviorDrop = 1, CFNotificationSuspensionBehaviorCoalesce = 2, CFNotificationSuspensionBehaviorHold = 3, CFNotificationSuspensionBehaviorDeliverImmediately = 4 }; typedef enum CFNotificationSuspensionBehavior CFNotificationSuspensionBehavior;
Константы
-
Drop
CFNotificationSuspensionBehaviorDrop
В то время как приложение получения в фоновом режиме, сервер не поставит уведомлений в очередь об указанном имени и возразит.
Доступный в OS X v10.0 и позже.
-
Coalesce
CFNotificationSuspensionBehaviorCoalesce
Сервер только поставит последнее уведомление в очередь об указанном имени и объекте; отбрасываются более ранние уведомления.
Доступный в OS X v10.0 и позже.
-
Hold
CFNotificationSuspensionBehaviorHold
Сервер будет содержать все уведомления соответствия, пока очередь не была переполнена (размер очереди, определенный сервером), в которой точке сервер может сбросить поставленные в очередь уведомления.
Доступный в OS X v10.0 и позже.
-
DeliverImmediately
CFNotificationSuspensionBehaviorDeliverImmediately
Сервер поставит уведомления об указанном имени и возразит, является ли приложение в фоновом режиме. Когда уведомление с этим поведением приостановки является соответствующим, это имеет эффект первого сбрасывания любых уведомлений с очередями.
Доступный в OS X v10.0 и позже.
Обсуждение
Приложение выбирает поведение приостановки для данного уведомления, когда это регистрирует наблюдателя для того уведомления с
CFNotificationCenterAddObserver
.Оператор импорта
Objective C
@import CoreFoundation;
Swift
import CoreFoundation
Доступность
Доступный в OS X v10.0 и позже.
-
-
Возможные варианты при регистрации уведомлений.
Объявление
Swift
var kCFNotificationDeliverImmediately: Int { get } var kCFNotificationPostToAllSessions: Int { get }
Objective C
enum { kCFNotificationDeliverImmediately = (1 << 0), kCFNotificationPostToAllSessions = (1 << 1) };
Константы
-
kCFNotificationDeliverImmediately
kCFNotificationDeliverImmediately
Сразу поставляет уведомление.
Доступный в OS X v10.3 и позже.
-
kCFNotificationPostToAllSessions
kCFNotificationPostToAllSessions
Поставляет уведомление всем сеансам.
Доступный в OS X v10.3 и позже.
Обсуждение
Используйте эти константы при вызове
CFNotificationCenterPostNotificationWithOptions
функция. -