앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태와 그 상태들 사이의 전이를 뜻한다. 앱의 상태는 앱이 현재 어떠한 것을 할 수 있는가를 결정한다.
앱의 실행/종료 및 앱이 foreground/background 상태에 있을 때 시스템이 발생시키는 이벤트에 의해 앱의 상태가 전환되는 일련의 과정
@main
함수가 실행된다.UIApplicationMain
함수를 호출한다. UIApplication 객체를 생성
한다. Main Event Roop
를 실행한다.유저가 일으키는 이벤트들을 처리하는 프로세스
UIApplication 객체는 앱이 실행될 때 메인런루프를 실행하고 이 메인런루프를 뷰와 관련된 이벤트나 뷰의 업데이트에 활용한다.
메인런루프는 뷰와 관련되어 있어서 메인Thread
에서 실행된다.
💡 유저가 일으키는 이벤트 처리 과정
1. 유저가 이벤트를 일으킨다 (버튼 터치, 화면 스와이프 등)
2. 시스템을 통해 이벤트가 생성된다.
3. UIKit 프레임워크를 통해 생성된 port로 해당 이벤트가 전달된다.
4. 이벤트는 앱 내부에 Queue의 형태로 Evenet Queue에 쌓인다.
5. Event Queue에 있는 이벤트들이 하나씩 Main Run Roop에 하나씩 매핑된다.
6. UIApplication 객체는 Main Run Loop에서 가장 먼저 실행되어야 하는 이벤트를 결정한다. 이 결정은 앱의 현재 상태와 이벤트의 우선순위 등을 고려하여 이루어진다.
앱의 상태는 총 5개로 구분된다.
Not running: 앱이 실행되지 않거나, 완전히 종료되어 동작하지 않는 상태
Inacticve Foreground
: 앱의 상태 전환 과정에서 잠깐 머무는 상태
앱이 실행되면서 Foreground에 진입하지만, 어떤 이벤트도 받지 않는 상태
Active Foreground
: 앱이 실행중이며 Foreground에 있고 이벤트를 받고 있는 상태
Background
: 앱이 Background에 있으며 다른 앱으로 전환되거나 홈버튼을 눌러서 밖으로 나가졌을 때 상태
일정시간이 지나면 앱이 Suspended 상태로 변한다.
Suspended Background
: 앱이 Background 상태에 있지만 아무 코드도 실행하지 않은 상태, 이 상태에서 앱은 메모리 상에 올라가있지만 아무 일도 하지 않기 때문에 배터리를 사용하지 않는다. 또한, OS에 의해 메모리부족현상이 발생하면 이 상태의 앱은 알림없이 메모리에서 없어질 수 있다.