본문 바로가기
iOS/UIKit

[UIKit] App Delegate와 Scene Delegate

by 최지철 2024. 6. 5.
728x90
반응형

App Delegate

  • App 전체가 공유하는 행동들을 관리.
  • app delegate는 App의 실질적인 root 객체라고 할 수 있다.
  • UIApplication 객체와 함께 동작하여 시스템과의 상호작용을 관리

AppDelegate가 처리하는 작업들

  • App의 중심이 되는 데이터 구조 초기화
  • Scene 설정/해제
  • App 외부로부터 전달되는 알림에 대응 (ex. 메모리부족, 백그라운드 다운로드완료 등)
  • 타겟이 특정 scene/view/viewController가 아닌 App 자체인 이벤트에 대응
  • 런치 시점에 필요한 서비스 등록 (ex. Apple Push Notification 서비스)
  • App 상태 복구(State Restoration) 관리

앱의 생명주기

  • Not Running : 실행되지 않았거나, 시스템에 의해 종료된 상태
  • Inactive : 실행 중이지만 이벤트를 받고있지 않은 상태. 앱 실행 중 미리알림 등 화면에 덮혀서 앱이 이벤트는 받지 못하는 상태 등
  • Active : 어플리케이션이 실질적으로 활동하고 있는 상태.
  • Background : 백그라운드 상태에서 실질적인 동작을 하고 있는 상태. 백그라운드에서 음악을 실행 등 뜻함.
  • Suspended : 백그라운드 상태에서 활동을 멈춘 상태. 빠른 재실행을 위하여 메모리에 적재된 상태지만 실질적으로 동작하고 있지는 않음.

Scene Delegate

  • UISceneSession의 장면 생성, 파괴 및 상태 복원과 같은 장면의 생명주기 이벤트를 담당

SceneDelegate의 역할

씬에 영향을 주는 상태 전이에 대한 응답 방법 정의 (전경으로 들어가서 활성화되거나 백그라운드로 진입할때와 같이)

Scene

  • 앱의 UI인스턴스
  • 사용자에게 보여지는 뷰 계층(view hierarchy)를 가지고 있는 하나의 컨테이너
  • 하나의 앱이 여러개의 Scene을 가질 수 있으며, 각각의 Scene이 서로 다른 객체이므로 독립적인 생명주기를 가지게 된다.

Scene의 생명주기

  • Unattached : 씬이 만들어지지 않은 상태
  • Inactive : 앱이 실행중 이지만, 이벤트를 받지 못하는 상태
  • active : 앱 실행중, 이벤트 받을 수 있음
  • Background : 다른 앱 실행, 홈화면으로 이동 등 백그라운드 상태로 넘어간 상태
  • Suspend : 백그라운드 진입 후, 아무작업이 없을 경우, 추후 앱을 다시 실행할 경우 빠른실행을 위해 메모리에 남아 있는 상태지만, 메모리가 부족한 상황이 될 경우 메모리에서 해제시킵니다.

앱 시작을 SceneDelegate에서 한 이유

  • iOS 13부터 앱 델레게이트와 씬 델레게이트가 책임을 나누어 가지게 되는데
  • 씬 델레게이트 UI 라이프 사이클에 대한 책임을 갖고 있기 때문에 UI 시작점을 씬델레게이트를 통해 들어가는게, 맞다 판단

728x90
반응형