Предположим, что ваше приложение поддерживает оконные сцены. Так что то, что пользователь пролистывает в переключателе приложений, на самом деле является сценой , а не вашим приложением в целом. Тогда возможности выглядят следующим образом:
На iPhone
Если сцена была самой передней:
sceneDidEnterBackground
applicationWillTerminate(_:)
Но если сцена не была первой, вы ничего не получите;вы уже получили sceneDidEnterBackground
, и вы не получите applicationWillTerminate(_:)
сейчас, потому что приложение не запущено.
На iPad, если приложение не поддерживает несколько окон
Если сцена была самой передней:
sceneDidDisconnect(_:)
application(_:didDiscardSceneSessions:)
applicationWillTerminate(_:)
Но если сцена не была передовой, вы ничего не получите;вы уже получили sceneDidEnterBackground
, и вы не получите applicationWillTerminate(_:)
сейчас, потому что приложение не запущено.
На iPad, если приложение поддерживает , поддерживает несколько окон
Если сцена была самой передней:
sceneDidEnterBackground
applicationWillTerminate(_:)
(возможно)
Но если сцена не была самой переднейвы ничего не получите;вы уже получили sceneDidEnterBackground
, и вы не получите applicationWillTerminate(_:)
сейчас, потому что либо приложение не запущено, либо приложение не завершается (если есть другое окно). Если приложение все еще работает, вы можете получить sceneDidDisconnect(_:)
и, возможно, application(_:didDiscardSceneSessions:)
позже.
Выводы
Что здесь странного? Это тот случай, когда мы работаем на iPad и поддерживаем сцены, но , а не несколько окон. Мы не получаем sceneDidEnterBackground
! Я считаю это бессвязным. Поскольку мы не поддерживаем несколько окон, это в основном приложение для iPhone, и оно должно вести себя как приложение для iPhone. Мне не нужно удваивать код только потому, что мое приложение работает на iPhone и iPad.