UIKit에서 앱의 라이프사이클은 iOS 앱이 실행될 때 시스템이 수행하는 일련의 단계들로 구성되며, 앱의 상태 전환에 따라 다양한 메서드가 호출됩니다. 앱 라이프사이클은 크게 네 가지 주요 상태로 나눌 수 있습니다.
1. 앱 상태(App State)
- Not Running: 앱이 실행되지 않은 상태입니다. 앱이 종료되었거나 아직 시작되지 않은 경우를 의미합니다.
- Inactive: 앱이 화면에 보이지만 이벤트를 처리하지 않는 상태입니다. 주로 전화가 오거나 알림이 표시될 때 잠시 이 상태가 됩니다.
- Active: 앱이 화면에 표시되고 사용자 입력을 처리할 준비가 된 상태입니다. 이 상태가 일반적인 실행 상태입니다.
- Background: 앱이 화면에 보이지 않지만 작업을 수행할 수 있는 상태입니다. 예를 들어, 음악 재생 앱은 백그라운드에서 음악을 계속 재생할 수 있습니다.
- Suspended: 백그라운드 상태에서 활동이 없으면 시스템이 앱을 대기 상태로 두며, 메모리에서 유지되지만 코드가 실행되지 않습니다. 메모리가 부족해지면 시스템은 이 상태의 앱을 종료할 수 있습니다.
2. 주요 라이프사이클 메서드
iOS 앱은 라이프사이클의 중요한 이벤트마다 AppDelegate
와 SceneDelegate
메서드를 호출합니다. 여기서는 AppDelegate
에 있는 가장 흔한 라이프사이클 메서드를 소개하겠습니다.
AppDelegate
라이프사이클 메서드
application(_:didFinishLaunchingWithOptions:)
- 앱이 시작될 때 호출됩니다. 초기 설정을 여기서 수행합니다. (예: Sentry, Firebase 등 외부 라이브러리 설정)
- 앱이 메모리에 로드된 후 한 번 호출됩니다.
applicationDidBecomeActive(_:)
- 앱이
Inactive
에서 Active
상태로 전환될 때 호출됩니다. 사용자 입력을 받기 시작할 준비가 된 상태입니다.
- 주로 앱이 다시 활성화될 때 작업을 재개하거나 UI를 업데이트할 때 사용합니다.
applicationWillResignActive(_:)
- 앱이
Active
에서 Inactive
상태로 전환될 때 호출됩니다. (예: 전화가 오거나 사용자가 홈 버튼을 누를 때)
- 주로 실행 중인 작업을 일시 정지하거나 상태를 저장할 때 사용합니다.
applicationDidEnterBackground(_:)
- 앱이 백그라운드로 전환될 때 호출됩니다. 사용자에게 보이지 않는 상태이므로 데이터를 저장하거나 백그라운드 작업을 설정하는 등 필요한 작업을 수행할 수 있습니다.
- 예를 들어, 중요한 데이터를 저장하거나 백그라운드 작업을 설정할 수 있습니다.
applicationWillEnterForeground(_:)
- 앱이 백그라운드에서 포그라운드로 전환될 때 호출됩니다. 앱이 다시 활성화되기 전에 준비 작업을 할 수 있습니다.
applicationWillTerminate(_:)
- 앱이 종료될 때 호출됩니다. 앱이 완전히 종료되기 직전이므로 데이터를 저장하거나 리소스를 정리할 수 있습니다.
- 이 메서드는
Suspended
상태의 앱이 종료될 때는 호출되지 않습니다.
3. SceneDelegate
와 멀티윈도우 지원
iOS 13 이후, UIKit은 SceneDelegate
를 통해 멀티윈도우 지원을 추가했습니다. SceneDelegate
는 각 씬(Scene) 단위로 라이프사이클 메서드를 제공합니다.
scene(_:willConnectTo:options:)
- 새로운 씬이 연결될 때 호출됩니다. 초기화 및 설정 작업을 수행합니다.
sceneDidBecomeActive(_:)