ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Life cycle
    IOS/기록 2021. 2. 4. 23:28

     

     

     

     

     

     

     

    1. Process(App) Life cycle [AppDelegate.swift]        

    앱(프로세스)이 Launch(시작)되고 Terminate(종료)되는 사이클

     

    <App(Process)의 시작>

     

     

    앱의 Launch 순서

     

     

     

    <App(Process)의 종료> 

    ● applicationWillTerminate(_:)를 이용하여 앱(process)을 종료할 수 있지만

     

    백그라운드 실행을 지원하는 앱의 경우 앱이 단순히 백그라운드로 이동하기 때문에

     

    사용자가 앱을 종료 할 때 일반적으로 이 메서드가 호출되지 않습니다.

     

    그러나 이 메서드는 앱이 백그라운드에서 실행되고 (일시 중단되지 않음)

     

    시스템이 어떤 이유로 이를 종료해야하는 상황에서 호출 될 수 있습니다.

     

    사용자가 app switcher를 통해 scene을 닫을 때(앱 프로세스를 Terminate할 때)

     

    AppDelegate에 새로 추가된 함수인 application (_ : didDiscardSceneSessions :)가 호출됩니다.

     

    이외에 앱의 프로세스는 Terminate되지 않고 Background에 있게 됩니다.

     

     

     

     

     

     

    2. Session Life cycle  [AppDelegate.swift]     

    Scene Session이 생성되고 삭제되는 사이클

     

    Scene이란?

    UIScene은 앱 UI의 한 인스턴스를 나타내는 객체입니다.

    Scene에는 UI의 하나의 인스턴스를 나타내는 windowsview controllers가 들어있습니다.
     

    또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고,

    이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다.

    Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다. 

    결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화
    할 수 있습니다.

    (Scenes - Apple Developer Document 참고)

     

    UI의 상태를 알 수 있는 UILifeCycle에 대한 역할을 SceneDelegate가 하게 됐습니다.

     

    역할이 분리된 대신 AppDelegate에서 Scene Session을 통해서

     

    scene에 대한 정보를 업데이트 받습니다.

     

    Scene Session이란?

    UISceneSession 객체scene의 고유의 런타임 인스턴스를 관리합니다.

    user가 앱에 새로운 scene을 추가하거나 프로그래밍 방식으로 새로운 scene을 요청하면,

    시스탬은 그 scene을 tracking하는 session 객체를 생성합니다. 

    그 session에는 Scene의 고유한 식별자

    scene의 세부 구성 정보(configuration details)가 포함되어 있습니다.
     
    UIKit는 session 정보를 그 scene 자체의 생애(life time)동안 유지하고

    app switcher에서 user가 그 scene을 닫으면(closing) 그 session을 삭제합니다.

    session 객체는 직접 생성하지 않고

    UIKit가 앱의 UI(사용자 인터페이스)에 대응하여 Session을 생성합니다.



    application (_ : configurationForConnecting : options :)


    application이 새로운 scene/window를 제공하려고 할 때 불리는 메소드입니다.

    (최초 launch 때 불리는 메소드 아님)


    앱의 Info.plist 파일에  scene-configuration data를 포함하지 않거나  

    scene-configuration data
    를 동적으로 변경하려는 경우 이 메서드를 구현합니다.

    UIKit은 새 scene을 만들기 직전에 이 메서드를 호출합니다.


    만들 scene의 타입,

    scene을 관리하는 데 사용할 delegate 객체,

    디스플레이할 초기 뷰 컨트롤러가 포함 된 스토리 보드

    포함한 scene 세부 정보가 포함 된 UISceneConfiguration 객체를 반환합니다.



    application (_ : didDiscardSceneSessions :)

    사용자가  app switcher를 통해 scene을 닫을 때 호출됩니다.




    SceneSession이 생성되거나 삭제될 때 AppDelegate에게 알려주는

    두 가지의 메소드가 AppDelegate에 추가
    된 것을 확인해 볼 수 있습니다.

    SceneSession은 앱에서 생성한 모든 scene의 정보를 관리
    합니다.

    UIApplication의 requestSceneSessionActivation(_:userActivity:options:errorHandler:) 메소드를 통해서

    UIKit에 새로운 scene과 session을 프로그래밍 방식으로 생성할 수 있습니다.

    UIKit은 app의 Info.plist 파일의 내용을 기반으로 기본 구성 데이터로 session을 초기화한다.

    (UISceneSession - Apple Developer Document 참고 developer.apple.com/documentation/uikit/uiscenesession)

     

     

     

     

     

    3. UI Life cycle [SceneDelegate.swift]

    앱이 foreground나 background에 있을때 시스템 관련 이벤트를 처리하는 사이클

     

    1) Unattached

     

    - scene이 연결되지 않은 상태

     

    2) Foreground Inactive

     

    - 앱이 foreground에서 실행중이지만 아무런 이벤트를 받지 않고 있는 상태 

    - App-based의 Inactive와 같음

     

    3) Foregroud Active

     

    - 앱이 foreground에서 실행중이며 이벤트를 받고 있는 상태

    - App-based의 active와 같음

     

    4) Background

     

    - App-based의 background와 같음

    - 앱이 background에 있으며 실행되는 코드가 있는 상태

    - 대부분 앱은 suspended상태로 이행하는 도중에 일시적으로 이 상태에 진입하지만

      파일 다운로드, 업로드 등 특정 시간동안 이 상태로 남아있게 되는 경우도 있음

    - 시스템이 임의로 Background 상태의 앱을 Suspended 상태로 만든다

     

    5) Suspended

     

    - 앱이 background에 있지만 실행되는 코드가 없는 상태

    - 메모리가 부족한 상황이 오면 iOS system은

      foreground에 있는 앱의 여유 메모리 공간 확보를 위해

      이 상태에 있는 앱들을 특별한 알림없이 정리할 수도 있음

    - App-based의 suspended와 같음

     

     

     

    해당 예시에서 점선은 시스템이 하는 것, 실선은 사용자가 하는 것

     

     

     

     

     

    빨간색 = AppDelegate.swift에서 하는 일 // 검은색 = SceneDelegate.swift에서 하는 일

     

     

     

     

     

    SceneDelegate에 있는 1:1로 매칭되는 메소드가 있습니다. 

     

     

     

     

    scene (_ : willConnectTo : options :)scene이 앱에 추가될 때 호출됩니다. 
    sceneDidDisconnect(_:)  scene의 연결이 해제될 때 호출됩니다. 
    연결이 해제된 scene은 다시 연결될 수도 있습니다  
    sceneDidBecomeActive(_:)  app switcher에서 선택되는 등 
    scene과 상호작용이 시작될 때 호출됩니다.

    (app switcher란 홈 버튼을 두 번 누르거나 
    아이폰 화면의 하단에서 위로 스와이프 했을 때 
    현재 실행 중인 앱들이 보이는 화면을 말합니다.)
    sceneWillResignActive(_:)  사용자가 scene과의 상호작용을 중지할 때 호출됩니다. 
    (다른 화면으로의 전환이 예입니다.)
    sceneWillEnterForeground(_:) scene이 포그라운드로 진입할 때 호출됩니다. 
    sceneDidEnterBackground(_:) scene이 백그라운드로 진입할때 호출됩니다.



    disconnect와 active, forground와 background으로 대칭성을 확인할 수 있습니다.

     

    to-remember-for-100-years.tistory.com/90?category=952091

    [UISceneDelegate] & [Managing Your App's Life Cycle] 번역

    developer.apple.com/documentation/uikit/uiscenedelegate Apple Developer Documentation developer.apple.com Protocol UISceneDelegate scene 내에서 발생하는 life-cycle 이벤트에 응답하는 데 사용하는 핵심..

    to-remember-for-100-years.tistory.com

     

     

     

    4. View Controller Life cycle [ViewController.swift]

    View가 나타나고 사라지는 사이클

     

     

     

     

     

     

    zeddios.tistory.com/43

    iOS ) View Controller의 생명주기(Life-Cycle)

    안녕하세요! 오늘은 View Controller생명 주기에 대해 알아보겠습니다. iOS를 시작하려고 하거나, 배우고 있는 분들이라면 반드시 알아야 해요. 하나하나 제대로 알아봅시다 ㅎㅎ View Controller의 생명

    zeddios.tistory.com

     

     

     

     

     

     

    developer.apple.com/videos/play/wwdc2020/10037/?time=182

     

    View가 Scene을 구성하고(Scene의 content)

     

    그렇게 만들어진 Scene이 (1개 또는 여러개) 모여서 App이 됩니다.



    출처: https://zeddios.tistory.com/1182 [ZeddiOS]

     

     

     

    728x90

    'IOS > 기록' 카테고리의 다른 글

    API Design Guidelines  (0) 2021.02.09
    Auto Layout 개념 정리  (0) 2021.01.29
    스토리보드 컴포넌트 조사  (0) 2021.01.28
    AppProject 속성 조사  (0) 2021.01.28
    info.plist 조사  (0) 2021.01.28
Designed by Tistory.