App LifecycleApp 의 생명주기는 다음 과정을 포함한다.
🌀 App 의 실행 · 종료🌀 App Foreground · Background 상태🌀 시스템이 발생시키는 event 에 의해 App 상태 전환iOS App 은 Objective-C 기반이기 때문에
main 함수에서 시작된다.
iOS 의 핵심 라이브러리인 UIKit framework 가 main 함수를 관리하기 때문에
직접 main 함수에 코드를 작성하지 않는다.
UIKit 은 main 함수를 다루는 과정에서
UIApplicationMain 함수를 실행하고 UIApplication 객체가 생성된다.

UIApplication 객체가 생성되고
@UIApplicationMain 또는 @Main 어노테이션이 있는 클래스를 찾아
AppDelegate 객체를 생성한다.
터치와 같은 유저의 액션을 받는 Main Event Loop 를 실행한다.
Main Run Loop발생한 이벤트들을 처리하는 프로세스이다.
UIApplication 객체는 앱이 실행될 때 Main Run Loop 을 실행하고
View 와 관련된 이벤트나 View 의 업데이트에 활용한다.
View 와 연관되어 있기 때문에 Main thread 에서 실행된다.

유저가 버튼 터치 등과 같은 이벤트를 만들면
OS 를 통해 이벤트가 생성된다.
생성된 이벤트는 UIKit 프레임워크를 통해 앱으로 전달된다.
이벤트는 앱 내부적으로 Queue 형태로 정리되고
Event Queue 에 쌓이게 된다.
Event Queue 에 쌓여있는 이벤트들은 Main Run Loop 에 하나씩 매핑된다.
가장 먼저 실행되어야하는 이벤트가 무엇인지
UIApplication 객체가 결정한다.
App State
Not Running - 앱이 실행되지 않았거나 완전히 종료되지 않은 상태Inactive - 앱이 실행되면서 Foreground 에 진입하지만 어떠한 이벤트도 받지 않는 상태active (Foreground) - 앱이 실행중이며, Foregound 에 있고, 이벤트를 받고 있는 상태Background - 앱이 Background 에 있으며, 다른 앱으로 전환되었거나 홈버튼을 눌러 밖으로 나갔을 때의 상태Suspended - 앱이 Background 상태에 있지만 아무 동작을 하지 않는 상태
↳ ❗️ 메모리상에 앱이 올라가 있지만 아무 일도 하지 않기 때문에 배터리를 사용하지 않는다.
↳ ❗️ OS 에 의해 메모리 부족현상이 발생하면 이 상태의 앱은 메모리에서 없어질 수 있으며 따로 알림을 주지 않는다.
App Delegateapplication:willFinishLaunchingWithOptions: 어플리케이션이 최초 실행될 때 호출되는 메소드application:didFinishLaunchingWithOptions: 어플리케이션이 실행된 직후 사용자의 화면에 보여지기 직전에 호출applicationDidBecomeActive: 어플리케이션이 Active 상태로 전환된 직후 호출applicationWillResignActive: 어플리케이션이 Inactive 상태로 전환되기 직전에 호출applicationDidEnterBackground: 어플리케이션이 백그라운드 상태로 전환된 직후 호출applicationWillEnterForeground: 어플리케이션이 Active 상태가 되기 직전에, 화면에 보여지기 직전의 시점에 호출.applicationWillTerminate: 어플리케이션이 종료되기 직전에 호출📚 Reference
Responding to the Launch of Your App
Managing Your App's Life Cycle
Know the Core Objects of Your App
[iOS] 앱의 생명주기(LifeCycle) AppDelegate
Main event loop
[iOS] 앱의 생명주기(App Life Cycle)와 앱의 구조(App Structure)
[iOS] App의 생명주기 (Life Cycle)