iOS App Life Cycle

나이든별 / Oldstar·2022년 6월 27일
0

Think about Keywords

목록 보기
27/37

공부한 것

  • App Life Cycle

요약

  • app의 상태가 바뀐다면 UIKit에서 알맞은 델리게잇 오브젝트의 메서드를 불러옴으로써 개발자에게 그것을 알린다.
  • iOS 13부터는 UISceneDelegate을 사용해 Scene 기반의 앱에서 라이프사이클 이벤트가 일어나는 것에 대응한다. iOS 12까지의 앱이거나 Scene을 지원하지 않는 앱에서는 UIApplicationDelegate을 사용해 앱의 라이프사이클 이벤트에 대응한다.
  • Scene 기반 앱의 경우, Scene의 라이프 사이클은 Unattached, Foreground Inactive, Foreground Active, Background, Suspended의 상태를 가질 수 있다.
  • 유저나 시스템이 새로운 Scene을 요구할 경우, UIKit은 해당 Scene을 만들고 Unattached 상태에 놓는다.
  • 만약 해당 Scene이 유저가 요청한 것이라면, Foreground로 빠르게 옮겨지며 이내 화면에 나타난다.
  • System이 요청한 것이라면, 해당 Scene은 Background로 잠시 옮겨져 이벤트를 수행한다.
  • 유저가 앱을 닫는다면, UIKit은 Scene을 Background로 옮겼다가, 결과적으로 Suspended 상태에 놓는다. Suspended는 말하자면 앱의 사망.
  • UIKit은 메모리 등의 자원이 필요할 때 Background나 Suspended 상태에 놓여 있는 Scene의 연결을 해제할 수 있으며, 이 경우 Scene은 Unattached 상태로 돌아간다.
  • Scene 기반의 앱이 아닌 경우, 앱의 라이프 사이클은 Not Running, Inactive, Active, Background, Suspended의 상태를 가질 수 있다.
  • 앱이 종료되기 전까지, Active와 Inactive의 상태를 오간다. 시스템은 UI가 나타나는지의 여부에 따라 앱을 Foreground 또는 Background에 둘 것인지 결정한다.

고민한 점 및 생각해본 점

  • 6개월쯤 전에 살짝 들춰 본 내용을 오늘 다시 접할 수 있어서 재미있었다.
  • 정말정말 예전엔 View Life Cycle과 혼동했던 적도 있었다. 지금은 절대 그렇지 않음
  • 다만, 둘이 뗄 수 없는 관계라는 것은 느낄 수 있었다.
  • 이번 기회를 통해 SceneDelegate이 왜 분리되었는지 이유에 대해 탐구해볼 수 있는 계기가 되었다.
    • 생각해보면, 아이패드 분할 화면을 지원했던 것이 iPadOS 13부터였던 것 같기도 하다.
    • 맥에서의 흔적기관처럼 남아 있는 Window 개념을, Scene이라는 새 이름을 달고 본격적으로 사용할 수 있게 되었다는 이야기가 인상깊었다.
  • 프로젝트를 하면서 ShazamKit 이외의 특정 SDK를 연동해본 경험이 없다. 하지만 이야기를 나누면서, 타사 SDK의 적용 등의 행동을 앱에서 수행할 때, AppDelegate을 사용할 수 있다는 것을 이번에 처음 인식했다.
  • 또, 어떤 경우에 앱이 Foreground Inactive 상태에 놓이는지에 대한 고찰도 재미있었다.

참조

https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
https://developer.apple.com/documentation/uikit/uiapplicationdelegate
https://developer.apple.com/documentation/uikit/uiscenedelegate

profile
함께 나아가고자 하는 사람

0개의 댓글