Регистрация в стандартном центре оповещений
iOS поддерживает разные центры оповещений (NSNotificationCenter), но вы вполне можете использовать стандартный центр оповещений системного уровня, если только это не противоречит особым требованиям вашего приложения. Для получения ссылки на стандартный центр оповещений используется вызов следующего вида: [NSNotificationCenter defaultCenter];
При наличии ссылки на центр оповещений можно регистрироваться на получение событий. При регистрации передается объект, к которому центр оповещений будет обращаться с обратным вызовом (обычно текущий объект), вызываемый метод, интересующее вас событие (или nil для любого события), а также (необязательный параметр) отправитель, от которого будет исходить событие (или nil для любого отправителя).
Отмена регистрации.
Как и в случае с управлением памятью, когда необходимость в оповещениях отпадает, регистрацию в центре оповещений необходимо отменить. Регистрация осуществляется в viewWillAppear:, а ее отмена в viewWillDisappear:. Отменить регистрацию несложно, достаточно обратиться к центру оповещений с вызовом removeObserver для зарегистрированного объекта.
Откуда вы все знаете?
Знаете, неудобно признаваться, но мы даже не уверены в том, что пригласили правильный Центр Оповещений.
Ну, если только вам не понадобится что-то особенное, то, скорее всего, вам нужен именно я. По умолчанию все используют именно меня. Минутку! Тут закрывается приложение. Я сейчас вернусь.
Ого! Так вы знаете обо всех запускаемых и завершающихся приложениях?
Да. Я — стандартный центр оповещений; все системные события проходят через меня. Может, и не все интересуются происходящим, но если захотят узнать, то обращаются ко мне.
Значит, когда кто-то хочет быть в курсе текущих событий, он сообщает вам, что его интересует?
Вот именно. Если кто-то хочет знать, что происходит в системе, то он регистрируется у меня. При регистрации он указывает, какие события его интересуют, кого нужно оповестить о них, и если они особенно придирчивы — то кто отправил это событие.
И вы сообщаете им об этих событиях?
Да, они говорят мне, какое сообщение нужно отправить, когда я обнаруживаю интересующее их событие. Я упаковываю информацию о событии в объект и вызываю указанный метод. Это не занимает много времени; отправитель почти всегда ожидает, когда я оповещу всех о событии, прежде чем продолжать работу.
Почти всегда?
Вообще-то отправитель может использовать очередь сообщений, чтобы я разослал оповещения позднее, когда он не будет занят, но этот способ применяется реже.
Хмм, в вашем описании все очень похоже на передачу сообщений. Отправитель хочет уведомить кого-то о произошедшем событии, вы вызываете метод. В чем разница?
- Дата: 21-12-2014, 12:56