← Lab
Application Life Cycle
스터디2025.06.08
- UIKit
Application 생명 주기에 대해

- iOS에서의 앱은 처음 실행되고 종료될 때까지의 생명주기가 존재한다.
- 앱이 Background로 전환되거나 Foreground로 진입하는 것도 생명주기의 일부분이다.
- 이런식으로 상태가 변화될 때 특정 클래스의 메서드를 통해 전파된다.
- iOS 12까지는
UIApplicationDelegate가 이 역할을 수행했지만, iOS 13+ 부터 Scene Delegate가 나오게 되면서UISceneDelegate가 수행하게 되었다. - iOS 13+ 에서
Scene이라는 개념이 도입되어 하나의 앱이 N개의 Scene을 가질 수 있게 되었다! - 따라서 각 씬마다 독립적인 생명 주기가 존재하며, 이를 시각화한 이미지가 위 첨부된 이미지이다.
앱이 실행되는 관점으로 바라본다면?
- UIKit이 씬을 앱에 연결한다.
- 씬의 초기 UI를 구성하고 필요한 데이터를 로드한다.
- Foreground Active 상태로 전환할 때 UI를 구성하고 사용자와 상호작용을 진행할 준비를 한다.
- Foreground가 Active에서 Inactive로 전환할 때는
데이터를 저장한다. - Foreground에서 Background로 전환할 때
- 중요한 Task를 완료시킨다.
- 메모리를 확보한다.
- 현재 앱 UI를 스냅샷으로 준비한다. (앱 전환기에서 보이는 그 화면!)
- Scene과의 연결이 끊어지면 해당 Scene과 관련된 모든 리소스를 정리한다. (Suspended 상태)
⭐ SceneDelgate의 핵심 메서드 정리
iOS 13+ UIKit 멀티 씬 환경에서 각 메서드는
각각의 Scene에 대해서만 호출되는 것을 꼭 알고 넘어가자.
📌 Foreground 진입 & 활성화
sceneWillEnterForeground(_:)
의미
- 씬이 Background → Foreground로 올라오기 직전 단계
- 아직 사용자 입력 불가 (Active 전)
- UI 갱신 준비, 캐시 리로딩 타이밍
주로 하는 일
- 마지막 상태 복원 직전 준비
- 경량 데이터 리프레시
- 애니메이션 준비
호출 시나리오
- 콜드 런치:
willConnectTo→sceneWillEnterForeground→sceneDidBecomeActive - 홈 화면에서 복귀:
sceneWillEnterForeground→sceneDidBecomeActive - 앱 전환기에서 복귀:
sceneWillEnterForeground→sceneDidBecomeActive
sceneDidBecomeActive(_:)
의미
- 씬이 Active 상태로 전환
- 사용자 상호작용 가능 시점
- 타이머/애니메이션/게임 루프 재개
주로 하는 일
- 렌더링 재개
- 재생/센서 업데이트 재시작
- 입력 허용
호출 시나리오
- 콜드 런치 완료:
sceneWillEnterForeground→sceneDidBecomeActive - 전화/알림 팝업 종료:
sceneDidBecomeActive - 앱 전환기 복귀:
sceneWillEnterForeground→sceneDidBecomeActive
📌 비활성화 & Background 진입
sceneWillResignActive(_:)
의미
- Active → Inactive로 전환
- 여전히 Foreground이지만 사용자 입력 잠시 중단
- 포커스를 잠깐 잃는 상황
주로 하는 일
- 일시정지 가능한 작업 pause
- 커밋되지 않은 편집 상태 임시 저장
호출 시나리오
- 앱 전환기 진입: Active →
sceneWillResignActive→ Inactive - 시스템 팝업/전화 수신: Active →
sceneWillResignActive→ (팝업 종료 시) →sceneDidBecomeActive
sceneDidEnterBackground(_:)
의미
- 씬이 화면에서 완전히 내려가 Background 상태
- 저장/동기화/리소스 해제 등 마무리 작업 시점
주로 하는 일
- 사용자 데이터 저장
- 스냅샷 준비
- 백그라운드 작업 스케줄
- 메모리 정리
호출 시나리오
- 홈 화면으로 나감:
sceneWillResignActive→sceneDidEnterBackground - 다른 앱으로 전환:
sceneWillResignActive→sceneDidEnterBackground
📌 씬 연결 해제 (수명 종료)
sceneDidDisconnect(_:)
의미
- 씬(윈도우)이 시스템에 의해 완전히 분리/해제
- iPad 멀티윈도우에서 창 닫기, 메모리 압박으로 씬 파기 시
주로 하는 일
- 씬 전용 자원 해제
- 관찰자 제거
- 강한 참조 끊기
호출 시나리오
- iPad 두 번째 창 닫기:
sceneWillResignActive→sceneDidEnterBackground→sceneDidDisconnect - 시스템 메모리 회수:
sceneDidEnterBackground→sceneDidDisconnect
직관적 흐름 타임라인 (made in GPT)
콜드 런치
willConnectTo
→ sceneWillEnterForeground
→ sceneDidBecomeActive // 사용자 입력 가능
앱 전환기 열기 (비활성화)
Active
→ sceneWillResignActive // 잠깐 입력 중단 (Inactive)
(다시 돌아오면)
→ sceneDidBecomeActive
홈 화면으로 나감 (백그라운드 진입)
Active
→ sceneWillResignActive
→ sceneDidEnterBackground // 저장/동기화/해제
백그라운드에서 복귀
sceneWillEnterForeground
→ sceneDidBecomeActive
전화/알림 등 일시적 포커스 상실
Active
→ sceneWillResignActive (팝업 표시)
(팝업 종료)
→ sceneDidBecomeActive
멀티윈도우 씬 닫기/파기
(보통 Background 상태)
→ sceneDidDisconnect // 씬 자원 정리
🤔 요약본
| 메서드 | 역할 | 키워드 |
|---|---|---|
sceneWillEnterForeground | 재개·갱신 | 데이터 리프레시, UI 준비 |
sceneDidBecomeActive | 활성화 | 타이머/애니메이션 재개, 입력 허용 |
sceneWillResignActive | 일시 정지 | 타이머/입력/애니메이션 중단 |
sceneDidEnterBackground | 저장·동기화 | 데이터 저장, 스냅샷, 리소스 해제 |
sceneDidDisconnect | 씬 소멸 | 관찰자/리소스 정리 |
참고 자료
Managing your app’s life cycle | Apple Developer Documentation
Preparing your UI to run in the background | Apple Developer Documentation
Energy Efficiency Guide for iOS Apps: React to Low Power Mode on iPhones