Вопрос проверяет понимание жизненного цикла iOS-приложения и того, какие точки расширения реально доступны при его завершении.
При завершении приложения могут вызываться методы, связанные с уходом в фон и завершением процесса. Чаще всего это переход в Background, а затем возможный вызов applicationWillTerminate. Однако последний вызывается не всегда. Разработчик не должен полагаться на гарантированное выполнение кода при завершении.
Завершение приложения в iOS — это не всегда управляемый процесс.
Перед завершением приложение обычно проходит такие этапы:
Переход из Active в Inactive
Переход в Background
Возможное завершение процесса системой
Вызываются:
sceneWillResignActive
sceneDidEnterBackground
Или для приложений без Scene:
applicationWillResignActive
applicationDidEnterBackground
Определение: applicationWillTerminate вызывается, когда система явно завершает приложение.
Этот метод:
может не вызваться
не вызывается при выгрузке из памяти в Suspended
вызывается при завершении по инициативе системы или пользователя (редко)
код в applicationWillTerminate не гарантирован
нельзя выполнять длительные операции
критичные данные нужно сохранять раньше
Надёжно реагировать на завершение приложения можно только через переход в Background. applicationWillTerminate — вспомогательная, но не гарантированная точка.