YunDaeHyeon
← Lab

Application Life Cycle

스터디2025.06.08
  • UIKit

Application 생명 주기에 대해

이미지 출처 : https://developer.apple.com/documentation/uikit/managing-your-app-s-life-cycle

  • iOS에서의 앱은 처음 실행되고 종료될 때까지의 생명주기가 존재한다.
  • 앱이 Background로 전환되거나 Foreground로 진입하는 것도 생명주기의 일부분이다.
  • 이런식으로 상태가 변화될 때 특정 클래스의 메서드를 통해 전파된다.
  • iOS 12까지는 UIApplicationDelegate가 이 역할을 수행했지만, iOS 13+ 부터 Scene Delegate가 나오게 되면서 UISceneDelegate가 수행하게 되었다.
  • iOS 13+ 에서 Scene이라는 개념이 도입되어 하나의 앱이 N개의 Scene을 가질 수 있게 되었다!
  • 따라서 각 씬마다 독립적인 생명 주기가 존재하며, 이를 시각화한 이미지가 위 첨부된 이미지이다.

앱이 실행되는 관점으로 바라본다면?

  1. UIKit이 씬을 앱에 연결한다.
  2. 씬의 초기 UI를 구성하고 필요한 데이터를 로드한다.
  3. Foreground Active 상태로 전환할 때 UI를 구성하고 사용자와 상호작용을 진행할 준비를 한다.
  4. Foreground가 Active에서 Inactive로 전환할 때는 데이터를 저장한다.
  5. Foreground에서 Background로 전환할 때
  • 중요한 Task를 완료시킨다.
  • 메모리를 확보한다.
  • 현재 앱 UI를 스냅샷으로 준비한다. (앱 전환기에서 보이는 그 화면!)
  1. 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

[iOS 앱개발] Foreground, Background 알아보기