[UIKit] 앱의 라이프사이클: 앱 베이스편

GUNDY·2023년 11월 23일
1
post-thumbnail

시간의 흐름에 따라 계절이 바뀌듯 앱의 상태도 시시각각 변화한다.

앱의 상태가 바뀌면 UIKit에서 delegate 객체의 메서드를 호출하게 된다.

  • iOS 12까지는 UIApplicationDelegate 객체를 사용하여 라이프사이클 이벤트에 응답한다.
  • iOS 13부터는 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를 사용한다.

어 그러면 iOS 13 이상에서도 UIApplicationDelegate를 써서 응답할 수 있어?

무려 프로젝트를 만들면 기본적으로 생성되는 SceneDelegate 파일을 삭제할 수도 있다.

뭐 조금 설정을 해줘야하지만 이번 글에서 다루는 주제는 아니므로 패스!

앱 베이스

iOS 12 이하의 버전 및 씬을 지원하지 않는 앱에서는 모든 라이프 사이클 이벤트가 UIApplicationDelegate 객체에 전달된다.

이 앱델리게이트 객체는 앱의 모든 window를 관리한다.

window가 뭔데?

간단히 말하면 화면에 표시되는 콘텐츠를 담는 컨테이너인데, 유저에 의한 이벤트를 해당하는 뷰컨 및 뷰에 전달한다.

결과적으로 앱 상태 전환은 앱의 전체 UI에 영향을 미친다.

앱 실행 후 화면에 UI가 보이는지에 따라 앱이 Inactive 또는 Background 상태로 전환된다. 만약 foreground로 실행하면 시스템이 앱을 자동으로 Active 상태로 전환해준다.

이후로는 앱이 종료될 때까지 Active와 Background를 오간다.

앱 전환시 할 일

  • 실행시 앱 데이터 구조와 UI를 초기화하기
  • 활성화시 UI 구성을 마치고 유저와 상호작용할 준비하기
  • 비활성화시 데이터를 저장하고 앱 동작을 멈추기
  • 백그라운드 진입시 중요 작업을 완료하고 메모리 확보 및 앱 스냅샷 준비하기
  • 종료시 모든 작업을 중지하고 공유 리소스 해제하기

라이프 사이클 이외의 이벤트

앱은 라이프 사이클 이벤트 외에도 처리할 이벤트들이 있다.

UIApplicationDelegate 객체를 사용하면 대부분 처리할 수 있다.

이벤트설명
Memory warnings앱의 메모리 사용량이 너무 많을 때 수신되는 이벤트.
Protected data becomes available/unavailable유저가 디바이스를 잠그거나 잠금해제할 때 수신되는 이벤트.
Handoff tasksNSUserActivity 개체를 처리해야 할 때 수신되는 이벤트.
Time changes통신사가 시간 업데이트를 보내는 경우 등 다양한 시간 변경에 대해 수신되는 이벤트.
Open URLs앱이 리소스를 열어야 할 때 수신되는 이벤트.

마무리

앱 베이스는 하나의 공통된 라이프 사이클을 다루는 반면 씬 베이스는 여러 씬을 다룰 수도 있기 때문에 각각의 씬마다의 개별 라이프 사이클이 있다는 차이가 있다.

다음에는 씬 베이스도 다뤄보도록 하자.

profile
개발자할건디?

0개의 댓글