Hackernoon과 Apple 공식 문서를 바탕으로 학습한 내용을 정리
Link:
Managing Your App's Life Cycle | Apple Developer Documentation
SwiftUI가 나오기 전, App LifeCycle을 검색하면 찾아볼 수 있는 내용들은 모두 UIApplicationDelegate를 기반으로 하고 있다. (이번에 공부를 하면서 UISceneDelegate와 이에 따른 LifeCycle을 알게 되었다.)
Not Running
: 어플리케이션이 실행되지 않았거나, 실행은 되었으나 시스템에 의해 terminated된 경우.
In Active : foreground에서 실행이 되고 있지만, 어떤 이벤트도 받고 있지 않는 상황 (전화나 메세지를 받은 경우)
Active : foreground에서 실행 중이며 이벤트를 받을 수 있는 상태. 이 상태에서 기본적인 사용(터치, 스크롤 등)을 한다. In Active 상태에서만 Active로 전환될 수 있다.
Background
: background에서 동작하며 코드를 실행하고 있는 상태. background → In Active → Active 순으로 진행이 되며, suspended된 상태에서 background 상태로 전환이 되고 In Active → Active로 전환이 됨.
Suspended : 백그라운드에 있으나 코드를 실행하고 있지 않은 상태. 시스템에 의해 자동적으로 상태가 변경되나 이를 Noti하지는 않음. low memory 상황이 생기면 foreground 상태인 앱을 위해 supspended 상태의 앱들을 kill 하여 공간 확보.
SwiftUI가 등장함에 따라 변경된 사항이며, target version이 iOS13 이상부터 사용이 가능하다.
앱이 Scene을 지원한다면, UIKit은 각각의 Scene들에 life-cycle 이벤트를 부여(?)한다. 사용자가 하나의 앱을 multiple scenes를 띄울 수 있기 때문에, scene은 각각의 life cycle을 갖는다. (하나의 앱을 동시에 여러개 띄울 수 있기 때문에 개별적으로 life cycle이 관리된다)
Scene support is an opt-in feature. To enable basic support, add the UIApplicationSceneManifest key to your app’s Info.plist file as described in Specifying the Scenes Your App Supports.
https://developer.apple.com/documentation/uikit/app_and_scenes/specifying_the_scenes_your_app_supports