Что такое NotificationCenter
NotificationCenter — это встроенный в iOS механизм обмена сообщениями по паттерну publish-subscribe, который позволяет объектам рассылать информацию по приложению, не требуя прямых ссылок друг на друга.
Как это работает
- издатель отправляет уведомление через
NotificationCenter.default.post
- Один или несколько наблюдателей регистрируются на прослушивание этого уведомления с помощью
NotificationCenter.default.addObserver
- Когда уведомление отправляется, все зарегистрированные наблюдатели получают его одновременно
// Отправка уведомления
NotificationCenter.default.post(name: .myCustomEvent, object: nil)
// Прослушивание уведомления
NotificationCenter.default.addObserver(self, selector: #selector(handleEvent), name: .myCustomEvent, object: nil)
Преимущества
- Слабая связанность — отправитель и получатель не зависят друг от друга напрямую
- Широковещательность — одно уведомление может достичь нескольких наблюдателей одновременно
- Удобно для системных событий, таких как появление клавиатуры или обновления жизненного цикла приложения
Недостатки
- Сложно отследить — бывает трудно понять, откуда исходит уведомление и кто его слушает
- Нет проверки на этапе компиляции — имена уведомлений обычно это строки или статические расширения, поэтому опечатки превращаются в ошибки времени выполнения
- Риски управления памятью — если не удалять наблюдателей, это может приводить к неожиданному поведению или крашам
- Злоупотребление ведёт к спагетти-коду — при чрезмерном использовании становится трудно отслеживать поток выполнения и поддерживать приложение
Лучшие практики
- Всегда используй строго типизированные имена уведомлений через расширения
Notification.Name
- Удаляй наблюдателей в
deinit или когда они больше не нужны
- Предпочитай delegation или Combine для взаимодействия один-к-одному, оставляя
NotificationCenter для настоящих сценариев широковещательной рассылки