Уведомления

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

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

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

Будьте выборочными и определенными

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

Когда Вы регистрируетесь для получения уведомлений, необходимо всегда пробовать, указывают допустимое имя уведомления и объект. Несмотря на то, что можно указать nil для имени уведомления, делая так заставляет Вас получать все уведомления, которые могут вызвать значимое понижение производительности. Указание допустимого имени сокращает количество уведомлений, диспетчеризирующихся Вашему обработчику. Точно так же при указании доступного объекта с уведомлением Вы далее фильтруете число уведомлений, Вы получаете и сокращаете потерю производительности.

Оптимизируйте свои обработчики уведомления

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

Если необходимо выполнить дополнительную работу после получения уведомления, рассмотреть задержку, которые работают до более позднего использования таймера или путем передачи его рабочему потоку. Для получения дополнительной информации посмотрите Разблокирование Вашего Пользовательского интерфейса.

Избегайте неоднократно добавлять или удалять наблюдателей

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

Посреднический объект наблюдателя может быть настроен на Ваши определенные структуры данных очень эффективнее, чем объект NSNotificationCenter по умолчанию. Ваш посредник вел бы список Ваших недолгих объектов и должен быть в состоянии добавить те объекты к его внутренним структурам данных быстро. После получения уведомления от центра уведомления Вы могли тогда асинхронно передать то уведомление своим недолгим объектам с помощью makeObjectsPerformSelector:withObject: метод.

Рассмотрите альтернативы уведомлениям

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

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

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

Для получения дополнительной информации о наблюдении значения ключа, посмотрите, что Значение ключа Наблюдает Руководство по программированию.