iOS - Life Cycle

luminoux·2022년 9월 14일
0

iOS-Basic

목록 보기
1/1

1. iOS의 LifeCycle

현재 앱의 상태에 따라, 할 수 있는 것과 없는 것이 결정된다.

iOS 13이상에서는 UISceneDelegate에서 관리할 수 있다.

foreground 앱은 user가 사용하고 있기 때문에 user의 관심을 받는다.

따라서 CPU를 포함한 system resource에서 우선순위를 가지게 된다.

반면에 background 앱은 화면의 밖의 일이기 때문에 작업을 할 수 없다.

앱의 상태가 바뀔 때 마다, delegate가 method를 호출해 우리에게 알려준다.

iOS 13이후로 바뀐 점

iOS 12까지는 하나의 앱에 하나의 window

즉, 하나 앱을 동시에 키는 것이 불가능

iOS 13부터는 scene의 개념이 생김

이 scene 덕분에 하나의 앱을 동시에 키는 것이 가능해졌다.

AppDelegate의 역할 중 UI의 상태를 알 수 있는 UILifeCycle에 대한 부분을
SceneDelegate가 대체하게 되었다.


2. 앱의 실행 과정

  1. main 함수가 실행
  2. main 함수가 UIApplicationMain호출
  3. UIApplicationMain -> UIApplication 객체 생성
  4. 데이터 로딩 info.plist, .nib 파일 등등, 필요한 데이터
  5. AppDelegate 객체 생성, UIApplication 연결
  6. 실행 완료를 압두고 didFinishLaunchingWithOptions 메시지를 보낸다.

UIkit framework가 main함수를 관리한다.

AppDelegate에 보면 main이 어노테이션 으로 대체되어있다.


3. Structure of Application

iOS앱은 MVC(Model-View-Controller)구조를 사용한다.
이 디자인 패턴의 중요성은 Data, 비지니스로직, UI를 분리한다는 점이고,
이를 통해 서로 다른 디바이스에서도 동작할 수 있다.

UIApplication객체는 앱이 실행될 때, Main Run Loop를 실행시킨다.
이는 메인스레드에서 동작한다.

  • 위의 사진을 보면, 사용자가 디바이스에서 특정 액션을 취했다고 한다면,
  • OS와 UIkit의 port를 통해 Eventqueue에 쌓이게 된다.
  • queue에 전달된 Event들은 순차적으로 Main Loop에서 실행된다.

4. State of App

  • Not Running
    실행되지 않았거나, 종료된 상태

  • InActive
    실행 중이지만, 이벤트를 받고 있지 않는 상태
    앱 실행 중 Alert가 화면에 덮혀 실질적으로 이벤트를 받지 못하는 상태

  • Active
    어플리케이션이 활동하고 있는 상태

  • Background
    백그라운드 상태에서 실질적인 동작을 하고 있는 상태
    예를 들면 백그라운드에서 노래를 재생하고 있는 상태

  • Suspended
    백그라운드에서 활동을 멈춘 상태


profile
Apple Developer Academy @ Postech 2022

0개의 댓글