NSNotificationCenter
NSNotificationCenter
объект (или просто, центр уведомления) обеспечивает механизм для широковещательной информации в программе. NSNotificationCenter
объект является по существу таблицей отгрузки уведомления.
Объекты регистрируются в центре уведомления для получения уведомлений (NSNotification
объекты) использование addObserver:selector:name:object:
или addObserverForName:object:queue:usingBlock:
методы. Каждый вызов этого метода указывает ряд уведомлений. Поэтому объекты могут зарегистрироваться как наблюдатели различных наборов уведомления путем вызова этих методов несколько раз.
Каждая рабочая программа Какао имеет центр уведомления по умолчанию. Вы обычно не создаете свое собственное. NSNotificationCenter
объект может поставить уведомления только в единственной программе. Если Вы хотите отправить уведомление другим процессам или получить уведомления от других процессов, используйте экземпляр NSDistributedNotificationCenter
.
Наследование
-
NSObject
-
NSNotificationCenter
-
NSDistributedNotificationCenter
-
NSObject
-
NSNotificationCenter
-
NSDistributedNotificationCenter
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.0 и позже.
-
Возвращает центр уведомления процесса по умолчанию.
Объявление
Swift
class func defaultCenter() -> NSNotificationCenter
Objective C
+ (NSNotificationCenter *)defaultCenter
Возвращаемое значение
Центр уведомления текущего процесса по умолчанию, использующийся для системных уведомлений.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Добавляет запись в таблицу отгрузки получателя с очередью уведомления и блоком, чтобы добавить к очереди и дополнительным критериям: имя уведомления и отправитель.
Объявление
Swift
func addObserverForName(_
name
: String?, objectobj
: AnyObject?, queuequeue
: NSOperationQueue?, usingBlockblock
: (NSNotification!) -> Void) -> NSObjectProtocolObjective C
- (id<NSObject>)addObserverForName:(NSString *)
name
object:(id)obj
queue:(NSOperationQueue *)queue
usingBlock:(void (^)(NSNotification *note))block
Параметры
name
Имя уведомления, для которого можно зарегистрировать наблюдателя; т.е. только уведомления с этим именем используются, чтобы добавить блок к очереди работы.
Если Вы передаете
nil
, центр уведомления не использует имя уведомления, чтобы решить, добавить ли блок к очереди работы.obj
Объект, уведомления которого Вы хотите добавить блок к очереди работы.
Если Вы передаете
nil
, центр уведомления не использует отправителя уведомления, чтобы решить, добавить ли блок к очереди работы.queue
Очередь та работы, к который
block
должен быть добавлен.Если Вы передаете
nil
, блок выполняется синхронно на потоке регистрации.block
Блок, который будет выполняться, когда получено уведомление.
Блок копируется центром уведомления и (копия) сохраненный, пока не удалена регистрация наблюдателя.
Блок берет один параметр:
notification
Уведомление.
Возвращаемое значение
Непрозрачный объект для действия как наблюдатель.
Обсуждение
Если данное уведомление инициировало больше чем один блок наблюдателя, блоки могут все быть выполнены одновременно с уважением к друг другу (но на их данной очереди или на текущем потоке).
Следующий пример показывает, как можно зарегистрироваться для получения уведомлений изменения локали.
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
self.localeChangeObserver = [center addObserverForName:NSCurrentLocaleDidChangeNotification object:nil
queue:mainQueue usingBlock:^(NSNotification *note) {
NSLog(@"The user's locale changed to: %@", [[NSLocale currentLocale] localeIdentifier]);
}];
Чтобы не зарегистрировать наблюдения, Вы передаете объект, возвращенный этим методом к
removeObserver:
. Необходимо вызватьremoveObserver:
илиremoveObserver:name:object:
перед любым объектом, указаннымaddObserverForName:object:queue:usingBlock:
освобожден.NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center removeObserver:self.localeChangeObserver];
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.6 и позже.
-
Добавляет запись в таблицу отгрузки получателя с наблюдателем, уведомление селекторные и дополнительные критерии: имя уведомления и отправитель.
Объявление
Swift
func addObserver(_
notificationObserver
: AnyObject, selectornotificationSelector
: Selector, namenotificationName
: String?, objectnotificationSender
: AnyObject?)Objective C
- (void)addObserver:(id)
notificationObserver
selector:(SEL)notificationSelector
name:(NSString *)notificationName
object:(id)notificationSender
Параметры
notificationObserver
Объект, регистрирующийся как наблюдатель. Это значение не должно быть
nil
.notificationSelector
Селектор, указывающий сообщение получатель, отправляет
notificationObserver
уведомлять его относительно регистрации уведомления. Метод, указанныйnotificationSelector
должен иметь один и только один параметр (экземплярNSNotification
).notificationName
Имя уведомления, для которого можно зарегистрировать наблюдателя; т.е. только уведомления с этим именем поставлены наблюдателю.
Если Вы передаете
nil
, центр уведомления не использует имя уведомления, чтобы решить, поставить ли его наблюдателю.notificationSender
Объект, уведомления которого наблюдатель хотят получить; т.е. только уведомления, отправленные этим отправителем, поставлены наблюдателю.
Если Вы передаете
nil
, центр уведомления не использует отправителя уведомления, чтобы решить, поставить ли его наблюдателю.Обсуждение
Обязательно вызовите
removeObserver:name:object:
преждеnotificationObserver
или любой объект, указанный вaddObserver:selector:name:object:
освобожден.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Удаляет все записи, указывающие данного наблюдателя от таблицы отгрузки получателя.
Объявление
Swift
func removeObserver(_
notificationObserver
: AnyObject)Objective C
- (void)removeObserver:(id)
notificationObserver
Параметры
notificationObserver
Наблюдатель для удаления. Не должен быть
nil
.Обсуждение
Обязательно вызовите этот метод (или
removeObserver:name:object:
) преждеnotificationObserver
или любой объект, указанный вaddObserver:selector:name:object:
освобожден.Вы не должны использовать этот метод для удаления всех наблюдателей из объекта, бывшего долгосрочным, потому что код может не быть единственными наблюдателями добавления кода, включающими объект.
Следующий пример иллюстрирует, как не зарегистрироваться
someObserver
для всех уведомлений, для которых это ранее зарегистрировалось. В этом безопасно выполнитьdealloc
метод, но не должен иначе использоваться — использованиеremoveObserver:name:object:
вместо этого.[[NSNotificationCenter defaultCenter] removeObserver:someObserver];
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
См. также
-
Удаляет соответствие записей из таблицы отгрузки получателя.
Объявление
Swift
func removeObserver(_
notificationObserver
: AnyObject, namenotificationName
: String?, objectnotificationSender
: AnyObject?)Objective C
- (void)removeObserver:(id)
notificationObserver
name:(NSString *)notificationName
object:(id)notificationSender
Параметры
notificationObserver
Наблюдатель для удаления из таблицы отгрузки. Укажите наблюдателя для удаления только записей для этого наблюдателя. Не должен быть
nil
, или сообщение не будет иметь никакого эффекта.notificationName
Имя уведомления для удаления из таблицы отгрузки. Укажите имя уведомления для удаления только записей, указывающих это имя уведомления. Когда
nil
, получатель не использует имена уведомления в качестве критериев удаления.notificationSender
Отправитель для удаления из таблицы отгрузки. Укажите отправителя уведомления для удаления только записей, указывающих этого отправителя. Когда
nil
, получатель не использует отправителей уведомления в качестве критериев удаления.Обсуждение
Обязательно вызовите этот метод (или
removeObserver:
) перед объектом наблюдателя или любым объектом, указанным вaddObserver:selector:name:object:
освобожден.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
См. также
-
Отправляет данное уведомление получателю.
Объявление
Swift
func postNotification(_
notification
: NSNotification)Objective C
- (void)postNotification:(NSNotification *)
notification
Параметры
notification
Уведомление сообщению. Это значение не должно быть
nil
.Обсуждение
Можно создать уведомление с
NSNotification
метод классаnotificationWithName:object:
илиnotificationWithName:object:userInfo:
. Исключение повышено еслиnotification
nil
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Создает уведомление с именем и отправителем и отправляет его на получатель.
Объявление
Swift
func postNotificationName(_
notificationName
: String, objectnotificationSender
: AnyObject?)Objective C
- (void)postNotificationName:(NSString *)
notificationName
object:(id)notificationSender
Параметры
notificationName
Имя уведомления.
notificationSender
Объект, отправляющий уведомление.
Обсуждение
Этот метод вызывает
postNotificationName:object:userInfo:
с auserInfo
параметрnil
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
См. также
-
Создает уведомление с именем, отправителем и информацией и отправляет его на получатель.
Объявление
Swift
func postNotificationName(_
notificationName
: String, objectnotificationSender
: AnyObject?, userInfouserInfo
: [NSObject : AnyObject]?)Objective C
- (void)postNotificationName:(NSString *)
notificationName
object:(id)notificationSender
userInfo:(NSDictionary *)userInfo
Параметры
notificationName
Имя уведомления.
notificationSender
Объект, отправляющий уведомление.
userInfo
Информация об уведомление. Может быть
nil
.Обсуждение
Этот метод является предпочтительным методом для регистрации уведомлений.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
См. также