지난 포스팅에서 알아보았듯이 MultipleWindow를 지원하면서 SceneDelegate가 등장하였고, 

AppDelegate UI LifeCycle을 관리하지 않게 되었다.

 

 

이에 따라 Life Cycle도 App-Based Life Cycle 에서 Scene-Based Life Cycle로 바뀌게된다.

 

 

App State

Life Cycle에 대해 알아보기 이전에 먼저 App State들은 무엇이 있는지 알아보자!

  • Not Running : 앱이 아예 실행되지 않았거나, 시스템에 의해 완전히 종료된 상태
  • Inactive : 앱이 실행중이거나 아무 이벤트를 받지 못하는 상태
    • 앱을 실행중에 전화가 왔거나, 메시지, 알림같은 interrupt 발생시
    • 다른 상태로 넘어가기 전에 앱은 이상태를 거치게된다
  • Active : 앱이 실행중이며 이벤트를 받을 수 있는 상태
  • Background : 앱이 백그라운드에 있으며 여전히 실행되고 있는 코드가 있는 상태 
    • 백그라운드에서 음악 재생!
  • Suspended : 앱이 백그라운드에 있고 실행되는 코드가 없는 상태 
    • 여전히 메모리에는 존재
    • CPU나 배터리 소모는 하지 않는 상태  (메모리부족일 경우 종료될수 있음) 

 

  • Foreground는 메모리 및 시스템 리소스에 높은 우선순위를 가지며, 필요할 경우 background의 app을 종료한다.
  • Background mode는 가능한 적은 메모리공간을 사용해기에, 사용자의 이벤트를 받기 어렵다.

 

 

App-Based Life Cycle

 

iOS 13이전의 Life Cycle은 UIApplicationDelegate에서 모든 Life Cycle을 관리하였다. 

 

Scene-Based Life Cycle

iOS13이후부터는 Scene이 등장하게 되는데 이 SceneDelegate가 Scene의 UI LifeCycle을 관리하게 되고, 

각각의 Scene마다 SceneDelegate를 가지게 된다.

즉, Scene마다 서로 다른 Life Cycle을 가질 수 있게 된것이다.

 

새로운 Scene을 요청하게 되면, UIKit은 새로운 Scene을 생성하고 Unattached 상태로 둔다.

User가 요청한 Scene의 경우는, Foreground 상태로 전환한다. 

System이 요청한 Scene의 경우는, Background 상태에서 실행한다.

 

background, suspended 상태에 있는 scene은 자원 회수를 위해 UIKit에 의해 끊어지고, Unattached 상태로 돌아갈수 있다.

 

 

Reference

복사했습니다!