iOS 13 이전, 이후 Application의 Life Cycle
iOS 13 이전, 이후 Application의 Life Cycle

Scene based Life-Cycle (iOS 13.0 이후)
- 사용자나 시스템이 scene을 요청하게 되면, UIKit은 unattached 상태의 scene을 생성.
- 사용자가 scene 요청 시 foreground inactive 상태에서 active 상태로 빠르게 전환하여 화면을 보여준다.
- 시스템이 scene 요청 시 background 상태로 전환. Ex, 위치 이벤트
- 사용자가 UI를 닫으면 foreground inactive 상태에서 background로 전환되고, 결국 suspended 상태가 된다.
- UIKit은 리소스를 회수하기 위해서 background 상태, suspended 상태를 언제든지 unattached 상태로 전환할 수 있다.
App based Life-Cycle (iOS 12 이전)
- 사용자나 시스템이 window를 요청하게 되면, window를 생성한다.
- UIKit은 UI가 화면에 나타날지 여부에 따라 background 혹은 Inactive 상태로 전환한다.
- 화면에 나타나면 앱을 active 상태로 전환
- 그 후 앱이 종료될 때까지 앱은 active, background 상태에서 변동
iOS 13 이전, 이후 변동
- iOS 12까지는 하나의 앱에 하나의 window만 가질 수 있었다.
- iOS 13 이후 window 개념이 scene으로 바뀌고, 하나의 앱에 여러 개의 scene을 가질 수 있게 되었다.
- 기존(iOS 12까지)에 life cycle은 AppDelegate가 담당했는데, iOS 13 이후에 scene이 등장하면서 SceneDelegate가 라이프 사이클을 관리
- 기존과 같이 앱의 시작, 종료와 같은 기본 이벤트는 여전히 AppDelegate가 담당한다.
AppDelegate.swift
- Scene-based app이라도 앱의 시작, 종료 기본 이벤트를 AppDelegate에서 관리한다. (didLaunchingWithOptions 등)
- 앱 시작 시 UIKit은 UIApplication과 동시에 app delegate를 생성하고, 그 후 메인 루프가 시작
- UIApplication과 함께 작동하여 시스템과 상호작용 관리
- 역할
- 앱 중앙 데이터 구조 초기화
- 앱의 scene 구성
- 메모리 부족 경고 등 앱 외부 알림에 대응
- 앱 자체를 대상으로 scene, view, view controller에 국한되지 않는 이벤트에 대응
- 푸시 알림 서비스 등록 등
SceneDelegate.swift
- iOS 13이후의 scene의 라이프 사이클 관리