Вопрос проверяет умение безопасно работать с подписками и предотвращать утечки памяти и лишние события.
Корректное управление подписками означает создание и удаление их в правильные моменты жизненного цикла объекта. Подписки должны существовать ровно столько, сколько нужен получатель событий. Для этого используют явное удаление, автоматические токены или привязку к жизненному циклу. Такой подход снижает количество багов и утечек.
Подписки — это временная связь между источником событий и получателем, и она должна быть строго контролируемой.
Определение:Жизненный цикл подписки — период времени, в течение которого объект должен получать события.
Подписка должна:
создаваться, когда объект готов обрабатывать события
удаляться, когда объект больше не нужен
Классический вариант:
подписка в viewWillAppear
отписка в viewWillDisappear
override func viewWillAppear(_ animated: Bool) {
// addObserver
}
override func viewWillDisappear(_ animated: Bool) {
// removeObserver
}
Современный подход:
let token = NotificationCenter.default.addObserver(
forName: .someEvent,
object: nil,
queue: .main
) { _ in
// handle
}
// token хранится и освобождается при deinit
Плюсы:
меньше риска забыть отписку
проще контролировать время жизни
deinitПодходит для долгоживущих объектов:
сервисов
менеджеров
координаторов
Не создавать подписки "навсегда"
Явно определять владельца подписки
Проверять отписки в deinit
Документировать причины использования подписок
Корректное управление подписками — это контроль времени жизни связей. Подписка должна существовать только тогда, когда она действительно нужна.