viewWillDisappear
не вызывается, если вы принудительно разрушаете всю иерархию контроллера представления, заменяя root контроллер представления окна:
AppDelegate.sharedApp().window?.rootViewController = viewController
Вы не должны этого делать. Но если вы собираетесь это сделать, неудивительно, что viewWillDisappear
не вызывается.
Но теперь давайте спросим, для чего вам нужно viewWillDisappear
. Вам не нужно вызывать NotificationCenter.default.removeObserver
в современном iOS, поэтому пример не имеет смысла.
Более того, когда вы говорите
AppDelegate.sharedApp().window?.rootViewController = viewController
, любые существующие контроллеры представления должны go выйти существования и их deinit
будет называться. Вы можете использовать это как сигнал о том, что контроллер представления снят, если он вам нужен.
Если ваш deinit
является не вызываемым, это признак того, что у вас есть сохранить цикл. Но тогда , что - это проблема, которую вам нужно решить. Ваш вопрос не дает никакой информации об этом, поэтому невозможно помочь в деталях.
Просто для примера, Таймер часто является причиной цикла сохранения. Но это легко исправить: вместо звонка
scheduledTimer(timeInterval:target:selector:userInfo:repeats:)
вы звоните
scheduledTimer(withTimeInterval:repeats:block:)
и используете [weak self]
в block
.