시간의 흐름에 따라 계절이 바뀌듯 앱의 상태도 시시각각 변화한다.
앱의 상태가 바뀌면 UIKit에서 delegate 객체의 메서드를 호출하게 된다.
UIApplicationDelegate
객체를 사용하여 라이프사이클 이벤트에 응답한다.UISceneDelegate
객체를 사용하여 scene-based app의 라이프 사이클 이벤트에 응답한다.If you enable scene support in your app, iOS always uses your scene delegates in iOS 13 and later. In iOS 12 and earlier, the system uses your app delegate.
그래서 iOS 13부터는 scene support를 활성화하면 항상 UISceneDelegate
를 사용한다.
UIApplicationDelegate
를 써서 응답할 수 있어?무려 프로젝트를 만들면 기본적으로 생성되는 SceneDelegate 파일을 삭제할 수도 있다.
뭐 조금 설정을 해줘야하지만 이번 글에서 다루는 주제는 아니므로 패스!
iOS 12 이하의 버전 및 씬을 지원하지 않는 앱에서는 모든 라이프 사이클 이벤트가 UIApplicationDelegate
객체에 전달된다.
이 앱델리게이트 객체는 앱의 모든 window
를 관리한다.
window
가 뭔데?
간단히 말하면 화면에 표시되는 콘텐츠를 담는 컨테이너인데, 유저에 의한 이벤트를 해당하는 뷰컨 및 뷰에 전달한다.
결과적으로 앱 상태 전환은 앱의 전체 UI에 영향을 미친다.
앱 실행 후 화면에 UI가 보이는지에 따라 앱이 Inactive 또는 Background 상태로 전환된다. 만약 foreground로 실행하면 시스템이 앱을 자동으로 Active 상태로 전환해준다.
이후로는 앱이 종료될 때까지 Active와 Background를 오간다.
앱은 라이프 사이클 이벤트 외에도 처리할 이벤트들이 있다.
UIApplicationDelegate
객체를 사용하면 대부분 처리할 수 있다.
이벤트 | 설명 |
---|---|
Memory warnings | 앱의 메모리 사용량이 너무 많을 때 수신되는 이벤트. |
Protected data becomes available/unavailable | 유저가 디바이스를 잠그거나 잠금해제할 때 수신되는 이벤트. |
Handoff tasks | NSUserActivity 개체를 처리해야 할 때 수신되는 이벤트. |
Time changes | 통신사가 시간 업데이트를 보내는 경우 등 다양한 시간 변경에 대해 수신되는 이벤트. |
Open URLs | 앱이 리소스를 열어야 할 때 수신되는 이벤트. |
앱 베이스는 하나의 공통된 라이프 사이클을 다루는 반면 씬 베이스는 여러 씬을 다룰 수도 있기 때문에 각각의 씬마다의 개별 라이프 사이클이 있다는 차이가 있다.
다음에는 씬 베이스도 다뤄보도록 하자.