App LifeCycle (앱의 생명주기)

이호영·2021년 9월 16일
0

IOS

목록 보기
1/1

App LifeCycle란?

App의 생명 주기는 App의 실행/종료 및 App이 foreground 또는 background에 있을 때 시스템 알림에 응답하고 기타 중요한 시스템 관련 이벤트를 처리

AppDelegate (iOS 12 and earlier)

Appdelgate의 역할

  • 앱의 중앙 데이터 구조를 초기화합니다.
  • 앱의 장면을 구성합니다.
  • 메모리 부족 경고, 다운로드 완료 알림 등과 같이 앱 외부에서 발생하는 알림에 응답합니다.
  • 앱 자체를 대상으로 하는 이벤트에 응답하고 앱의 scene, view 또는 viewController와 관련이 없습니다.

Apple 푸시 알림 서비스와 같이 출시 시 필요한 서비스에 등록합니다.

앱의 상태 변화

Apple에서 정의하는 앱의 상태(App State)는 크게 5가지로 구분됩니다.

  • Not Running: 아무것도 실행하지 않은 상태
  • InActive: 앱이 Foreground 상태로 돌아가지만, 이벤트는 받지 않는 상태, 앱의 상태 전환 과정에서 잠깐 머무는 단계입니다.
  • Active: 일반적으로 앱이 돌아가는 상태
  • Background: 앱이 Suspended(유예 상태) 상태로 진입하기 전 거치는 상태,
  • Suspended: 앱이 Background 상태에 있지만, 아무 코드도 실행하지 않는 상태, 시스템이 임의로 Background 상태의 앱을 Suspended 상태로 만듭니다.

주의할점

  • Background 상태에서는 일부 필요한 추가 작업을 수행할 수 있습니다. 또한, Background 상태에서 앱을 실행하면 InActive 상태를 거치지 않고 앱이 실행됩니다.
  • 앱이 죽는 것(Suspended 상태에서 Not Running 상태로 진입하는 것)에는 알림을 받을 수 없습니다. 또한 Background 상태에서 Suspended 상태로 진입할 때 willTerminate 메소드가 실행되지만 이 또한 기기를 재부팅하면 실행되지 않습니다.

Scene Delegate

scene의 개념

UIKit은 객체를 사용하여 앱 UI의 각 인스턴스를 관리 합니다.
scene는 당신의 UI의 하나의 인스턴스를 표시하기위한 window와 viewController가 포함되어 있습니다.
scene은 동일한 메모리와 앱 프로세스 공간을 공유하면서 동시에 실행됩니다. 결과적으로 단일 app에 여러 scene과 scene delegate objects가 동시에 활성화될 수 있습니다

앱의 상태 변화

App Delegate와 다른점은

  • App-based는 not running과 suspended사이에 화살표가 있는데,
    Scene-based는 unattached와 suspended 사이 화살표가 없다

  • App-based는 suspended에서 inactive로 가는 화살표가 있었는데,
    Scene-Based는 suspended에서 foreground inactive로 가는 화살표가 없다.

App's Life Cycle 관련 Delegate 함수들

1. appDelegate

  • configurationForConnecting
    새 scene을 만들 때 사용할 UIKit의 구성 데이터를 검색
  • didDiscardSceneSessions
    app switcher에서 하나 이상의 앱 장면을 닫았다고 알립니다.
  • applicationDidBecomeActive
    앱이 활성화되었음을 알립니다.
  • applicationWillResignActive
    앱이 곧 비활성화될 것임을 알립니다.
  • applicationDidEnterBackground
    앱이 이제 백그라운드에 있음을 알립니다.
  • applicationWillEnterForeground
    앱이 포그라운드로 진입하려고 한다는 것을 알립니다.
  • applicationWillTerminate
    앱이 종료되려고 할 때 대리자에게 알립니다.

2. SceneDelegate

  • scene(UIScene, willConnectTo: UISceneSession, options: UIScene.ConnectionOptions)
    앱에 장면 추가에 대해 알립니다
  • sceneDidDisconnect
    UIKit이 앱에서 scene을 제거했음을 알립니다
  • sceneWillEnterForeground
    scene이 Foreground에서 실행되기 시작하고 사용자에게 표시될 것임을 알립니다
  • sceneDidBecomeActive
    scene이 활성화되었으며 이제 사용자 이벤트에 응답하고 있음을 알립니다.
  • sceneWillResignActive
    장면이 활성 상태를 끝내고 사용자 이벤트에 대한 응답을 중지하려고 한다고 대리자에게 알립니다.
  • sceneDidEnterBackground
    scene이 백그라운드에서 실행 중이며 더 이상 화면에 표시되지 않음을 알립니다.

viewController의 lifecycle

view 관리

  • init
    Nib 파일을 사용하여 뷰 컨트롤러에 대한 뷰를 지정합니다.
    nib 파일을 사용하면 단일 뷰 컨트롤러의 뷰를 지정할 수 있지만 뷰 컨트롤러 간의 segue 또는 관계를 정의할 수는 없습니다.
    nib 파일은 또한 뷰 컨트롤러 자체에 대한 최소한의 정보만 저장합니다.

  • loadview
    메서드를 사용하여 뷰 컨트롤러에 대한 뷰를 지정합니다.
    이방법에서 프로그래밍 방식으로 보기 계층을 만들고 해당 계층의 루트 보기를 보기 컨트롤러의 속성에 할당합니다.

  • viewdidload
    컨트롤러의 뷰가 메모리에 로드된 후 호출됩니다.

view 관련 알림 관리

view의 visibilty가 변경되면 viewController는 자동으로 자체 메서드를 호출하여 하위 클래스가 변경 사항에 응답할 수 있습니다.
view가 화면에 표시되도록 준비하고 변경 사항이나 기타 상태 정보를 저장 하는 데 사용하는 것과 같은 방법을 사용합니다.

  • viewWillAppear
    view가 view 계층에 추가될 것임을 뷰 컨트롤러에 알립니다.
  • viewDidAppear
    view가 view 계층에 추가되었음을 뷰 컨트롤러에 알립니다.
  • viewWillDisappear
    view가 view 계층에서 제거될 것임을 뷰 컨트롤러에 알립니다.
  • viewDidDisappear
    view가 view 계층에서 제거되었음을 뷰 컨트롤러에 알립니다.

출처 : https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle

0개의 댓글