이전 포스팅에서 계속됩니다.
AppDelegate
이러한 생명주기를 control하고 싶다면,
AppDelegate.swift 내부 method를 수정해야합니다.
프로젝트 내에서는 AppDelegate.swift 안에서 생명주기가 관리되기 때문입니다.
여기에선 앱 상태에 따라 실행되는 여러가지 Delegate method들을 담아서 실행하고 있습니다.
가장 상단에 @UIApplicationMain을 볼 수 있습니다. (구 @main)
@main은 프로그램의 시작점(entry point)을 뜻합니다. (관련 내용 참조)
2번째 상자를 보면
application(_:didFinishLaunchingWithOptions:)를 볼 수 있는데요.
app이 active상태로 전환된 뒤에 사용자에게 보여지기 전 호출됩니다.
일반적으로 여기에 초기화 코드를 많이 작성합니다.
AppDelegate.swift 내 메서드 실행관점에서 생명주기는 다음과 같은 순서로 정의할 수 있습니다.
1. application(_:willFinishLaunchingWithOptions:)
App이 최초 실행될 때 호출되는 메소드입니다
Not Running -> Inactive(Foreground)
2. application(_:didFinishLaunchingWithOptions:)
App이 실행 직후 화면이 사용자에게 보여지기 직전에 호출하며 일반적으로 초기화 코드를 작성합니다.
3. applicationDidBecomeActive(_:)
Inactive -> Active
화면이 나타난 후 호출되며, Inactive 상태로 넘어가 중지된 작업을 여기서 반드시 재실행시켜줘야 합니다.
4. applicationWillResignActive(_:)
Active -> Inactive
Inactive 상태로 전환되기 직전 호출해야 합니다.
5. applicationDidEnterBackground(_:)
Background
App이 Background 상태로 전환된 직후 호출되며, Suspended 상태로 전환됩니다.
이 때 OS에 의해 언제든지 강제종료될 수 있기 때문에 직전상태를 복구할 수 있는 정보를 저장하는 코드가 필요합니다.
6. applicationWillEnterForeground(_:)
Background-> Foreground( Inactive -> Active )
Background에서 Foreground로 돌아오기 직전, 화면에 보여지기 직전 호출
7. applicationWillTerminate(_:)
App이 종료되기 직전에 호출되나 다음과 같은 상황에서는 호출되지 않습니다.
-> 오류로 인한 App 종료, device 재시작, 사용자가 multitaksing을 통한 App 종료(Suspend상태에 있는 App 종료)
8. App 종료
SceneDelegate
iOS13부터 나오는 SceneDelegate는 Multi Scene을 위한 건데요.
대표적으로 iPad의 split view를 생각하시면 될 것 같습니다.
근데 여기서 나오는 Scene의 의미는 Stroyboard의 씬과는 의미가 좀 다릅니다.
스토리보드의 Scene은 각 화면을 한 개의 Scene이라고 하지만
SceneDelegate의 Scene은
하나의 App이 여러 복사본처럼 동시에 사용되는 경우 각각의 복사본을 의미합니다.
즉, App UI의 instance라고 생각하시면 될 것 같습니다.
이 Scene들은 자신들만의 생명주기가 있을 것이고,
이를 적절하게 Control하기 위해 SceneDelegate가 생겨난거라고 보시면 될 것 같습니다.
Scene-based Life Cycle도 App 생명주기와 크게 다르지 않으며 여러 상태가 있고,
명시된 delegate 함수들이 호출되며 이 함수들을 override 할 수 있습니다.
오류가 있거나, 피드백이 있다면 언제든지 댓글로 알려주세요!
감사합니다 :)
'iOS > And' 카테고리의 다른 글
Git에 관한 간단한 이해 (0) | 2022.10.28 |
---|---|
CGRect, CGPoint, CGSize에 대해 (0) | 2022.09.27 |
UserDefaults 사용하기 (0) | 2022.05.25 |
JSON(제이슨)이란 (0) | 2022.05.24 |
Parsing(파싱)이란 (0) | 2022.05.23 |