Я прочитал много предложений о правильном месте для вызова .removeObserver для NSNotificationCenter, поскольку viewDidUnload не вариант.
Мне просто интересно, будет ли новый deinit() в Swift хорошим выбором?
-Ник
Я прочитал много предложений о правильном месте для вызова .removeObserver для NSNotificationCenter, поскольку viewDidUnload не вариант.
Мне просто интересно, будет ли новый deinit() в Swift хорошим выбором?
-Ник
Это действительно зависит от роли класса, в котором вы подписываетесь на уведомления NSNotificationCenter. Если вы подписываетесь на:
UIView
Затем вы должны отказаться от подписки, как только просмотр станет невидимым для пользователя. Чтобы сэкономить циклы ЦП и не потреблять ресурсы, пока пользователь не видит представление.
UIViewController
Здесь также зависит от того, какое действие вы собираетесь выполнить в ответ на уведомление. Если это просто настройка пользовательского интерфейса, вы должны отказаться от подписки, как только контроллер представления исчезнет с экрана.
Уровень вашей службы приложений
Здесь нормально иметь .removeObserver
внутри deinit(). однако даже здесь я предлагаю вам более четко указывать, когда вы подписываетесь и отписываетесь от NSNotificationCenter
notifications, и помещаете их в методы запуска и остановки вашего сервиса.
Если вы ранее вызывали removeObserver
в viewDidUnload
/dealloc
/deinit
, то, начиная с iOS 9.0 и macOS 10.11, вам больше не нужно его вызывать:
Если ваше приложение предназначено для iOS 9.0 и более поздних версий или macOS 10.11 и более поздних версий, вам не нужно отменять регистрацию наблюдателя в его методе Dealloc.
источник: https://developer.apple.com/documentation/foundation/notificationcenter/1413994-removeobserver