현재 앱의 상태에 따라, 할 수 있는 것과 없는 것이 결정된다.
iOS 13이상에서는 UISceneDelegate에서 관리할 수 있다.
foreground 앱은 user가 사용하고 있기 때문에 user의 관심을 받는다.
따라서 CPU를 포함한 system resource에서 우선순위를 가지게 된다.
반면에 background 앱은 화면의 밖의 일이기 때문에 작업을 할 수 없다.
앱의 상태가 바뀔 때 마다, delegate가 method를 호출해 우리에게 알려준다.
iOS 12까지는 하나의 앱에 하나의 window
즉, 하나 앱을 동시에 키는 것이 불가능
iOS 13부터는 scene의 개념이 생김
이 scene 덕분에 하나의 앱을 동시에 키는 것이 가능해졌다.
AppDelegate의 역할 중 UI의 상태를 알 수 있는 UILifeCycle에 대한 부분을
SceneDelegate가 대체하게 되었다.
UIkit framework가 main함수를 관리한다.
AppDelegate에 보면 main이 어노테이션 으로 대체되어있다.
iOS앱은 MVC(Model-View-Controller)구조를 사용한다.
이 디자인 패턴의 중요성은 Data, 비지니스로직, UI를 분리한다는 점이고,
이를 통해 서로 다른 디바이스에서도 동작할 수 있다.
UIApplication객체는 앱이 실행될 때, Main Run Loop를 실행시킨다.
이는 메인스레드에서 동작한다.
Not Running
실행되지 않았거나, 종료된 상태
InActive
실행 중이지만, 이벤트를 받고 있지 않는 상태
앱 실행 중 Alert가 화면에 덮혀 실질적으로 이벤트를 받지 못하는 상태
Active
어플리케이션이 활동하고 있는 상태
Background
백그라운드 상태에서 실질적인 동작을 하고 있는 상태
예를 들면 백그라운드에서 노래를 재생하고 있는 상태
Suspended
백그라운드에서 활동을 멈춘 상태