Application life cycle in iOS

Lena·2021년 7월 5일
2

해당 글 번역(의역)과 이해에 도움이 되는 내용을 덧붙였습니다.😊


application life cycle은 app의 시작부터 종료까지 발생하는 event의 연속이다.

Steps involved from device reboot to app launch:

phone을 켜고 app icon을 터치하면 SpringBoard가 app을 실행한다(launch).

SpringBoard is the standard application that manages the iPhone’s home screen. Other tasks include starting WindowServer, launching and bootstrapping applications and setting some of the device’s settings on startup

SpringBoard가 app의 launch screen을 보여주는 동안, 우리의 앱은 필요한 라이브러리들을 로드에서 메모리 위로 올린다.
그리고 app이 실행되고 application delegate가 notifications을 받게된다.

AppDelegate가 application delegate이다. AppDelegate는 UIResponder class를 상속받고, UIApplicationDelegate 프로토콜을 구현하고 있다.

class AppDelegate: UIResponder, UIApplicationDelegate { ... }

UIApplicationDelegate를 구현해서 user events(such as app launch, app goes into background or foreground, app is terminated, a push notification was opened etc.)에 대한 알림을 받도록 한다.

UIResponder를 상속받아서 AppDelegate가 user events에 반응할 수 있게 하고, UIApplicationDelegate의 delegate가 AppDelegate이 되도록 한다.

Summary

  • SpringBoard라는 기본 앱이 app icon을 터치하면 app을 실행하고(@main 호출)
  • @main(entry point into app)이 실행되며 AppDelegate object가 생성되고, application의 delegate가 되며,
  • (app) event cycle을 manage 한다.

Execution States for Apps:

  • Not Running state : The app has not been launched or terminated by the system.
  • Inactive state : The app is entering the foreground state but not receiving events.
  • Active state: The app enters the foreground state and can process event.
  • Background state : In this state, if there is executable code, it will execute and if there is no executable code or the execution is complete, the application will be suspended immediately.
  • Suspended state : The app is in the background(in memory) but is not executing code and if system does not have enough memory, it will terminate the app.

AppDelegate가 app의 실행 상태(State)에 따라 cycle을 돌면서 manage 한다.

Not Running : app이 실행되지 않았거나 시스템에 의해 종료된 상태
Inactive : app이 foreground 상태에 진입했지만, (user) event를 받지는 못하는 상태
Active: pp이 foreground 상태에 진입했지만, (user) event를 처리할 수 있는 상태
Background : 이 상태에서는 실행 가능한 코드가 있더라도 즉시 중지된다.
Suspended : app이 background 상태에 있으면서 실행 가능한 코드가 없을 때, 시스템이 충분한 메모리가 없으면 app을 중지시킨다.

Interview Questions on App life cycle:

  • 앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있는가?
    background 상태에서는 코드가 실행되지 않고 즉시 중지된다. foreground 상태이더라도 Active 상태여야 event를 처리할 수 있다.

  • 상태 변화에 따라 다른 동작을 처리하기 위한 앱델리게이트 메서드들을 설명하시오.
    앱의 상태는 Not Running, Inactive, active, background, Suspended로 구분할 수 있는데, UIApplicationDelegate 프로토콜을 채택하여 AppDelegate가 구현한 메서드 안에서 상태에 따른 동작을 처리할 수 있다.

  • SceneDelegate에 대해 설명하시오.
    iOS 13부터 추가된 객체로, iOS가 멀티 윈도우를 지원하게 되면서 AppDelegate의 역할 일부를 SceneDelegate가 하도록 변경되었다.
    SceneDelegate는 UISceneDelegate의 subclass인 UIWindowSceneDelegate를 채택하며, app life cycle에 따른 동작을 관리할 수 있다.

1개의 댓글

comment-user-thumbnail
2021년 7월 5일

잘 보고 갑니다. ^^

답글 달기