[iOS] iOS App Lifecycle

Eugenie·2022년 8월 30일
0

App Lifecycle

App 의 생명주기는 다음 과정을 포함한다.

🌀 App 의 실행 · 종료
🌀 App Foreground · Background 상태
🌀 시스템이 발생시키는 event 에 의해 App 상태 전환

iOS App 은 Objective-C 기반이기 때문에
main 함수에서 시작된다.

iOS 의 핵심 라이브러리인 UIKit framework 가 main 함수를 관리하기 때문에
직접 main 함수에 코드를 작성하지 않는다.

UIKitmain 함수를 다루는 과정에서
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 Delegate

🌳 application: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)

profile
🌱 iOS developer

0개의 댓글