-
Life cycleIOS/기록 2021. 2. 4. 23:28
앱(프로세스)이 Launch(시작)되고 Terminate(종료)되는 사이클
<App(Process)의 시작>
앱의 Launch 순서 <App(Process)의 종료>
● applicationWillTerminate(_:)를 이용하여 앱(process)을 종료할 수 있지만
백그라운드 실행을 지원하는 앱의 경우 앱이 단순히 백그라운드로 이동하기 때문에
사용자가 앱을 종료 할 때 일반적으로 이 메서드가 호출되지 않습니다.
그러나 이 메서드는 앱이 백그라운드에서 실행되고 (일시 중단되지 않음)
시스템이 어떤 이유로 이를 종료해야하는 상황에서 호출 될 수 있습니다.
● 사용자가 app switcher를 통해 scene을 닫을 때(앱 프로세스를 Terminate할 때)
AppDelegate에 새로 추가된 함수인 application (_ : didDiscardSceneSessions :)가 호출됩니다.
● 이외에 앱의 프로세스는 Terminate되지 않고 Background에 있게 됩니다.
- developer.apple.com/documentation/uikit/app_and_environment/responding_to_the_launch_of_your_app/about_the_app_launch_sequence
- developer.apple.com/documentation/uikit/uiapplicationdelegate/1623111-applicationwillterminate
- developer.apple.com/documentation/uikit/uiapplicationdelegate/3197906-application
Scene Session이 생성되고 삭제되는 사이클
Scene이란?
UIScene은 앱 UI의 한 인스턴스를 나타내는 객체입니다.
Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다.
또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고,
이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다.
Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다.
결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.
(Scenes - Apple Developer Document 참고)UI의 상태를 알 수 있는 UILifeCycle에 대한 역할을 SceneDelegate가 하게 됐습니다.
역할이 분리된 대신 AppDelegate에서 Scene Session을 통해서
scene에 대한 정보를 업데이트 받습니다.
- developer.apple.com/documentation/uikit/uiscene
- developer.apple.com/documentation/uikit/app_and_environment/scenes
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을 생성합니다.- developer.apple.com/documentation/uikit/uiscenesession
- developer.apple.com/documentation/uikit/uiscene/3197911-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)앱이 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
View가 나타나고 사라지는 사이클
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