250x250
KemiKIM
29 to iOS
KemiKIM
GitHub
Loading data ...
  • 분류 전체보기 (41)
    • 지금 : 세상에서 가장 간단한 메모 앱 (1)
    • iOS (22)
      • Swift (4)
      • Xcode, UI (7)
      • And (9)
      • 이것이 삽질이다. (2)
    • other (18)
      • Error Solution (8)
      • a Little Tip (5)
      • Mac Start Setting (5)
    • Project (0)
hELLO · Designed By 정상우.
KemiKIM

29 to iOS

App 생명주기(Life Cycle) (2)
iOS/And

App 생명주기(Life Cycle) (2)

2022. 5. 26. 17:49

 

이전 포스팅에서 계속됩니다.

 

 

 

 


 

 

 

 

AppDelegate

 

 

 

이러한 생명주기를 control하고 싶다면,

AppDelegate.swift 내부 method를 수정해야합니다.

 

 

프로젝트 내에서는 AppDelegate.swift 안에서 생명주기가 관리되기 때문입니다.

여기에선 앱 상태에 따라 실행되는 여러가지 Delegate method들을 담아서 실행하고 있습니다.

 

 

AppDelegate.swift

 

 

 

 가장 상단에 @UIApplicationMain을 볼 수 있습니다. (구 @main)

@main은 프로그램의 시작점(entry point)을 뜻합니다. (관련 내용 참조)

 

 

 

 

2번째 상자를 보면

application(_:didFinishLaunchingWithOptions:)를 볼 수 있는데요.

 

app이 active상태로 전환된 뒤에 사용자에게 보여지기 전 호출됩니다.

일반적으로 여기에 초기화 코드를 많이 작성합니다. 

여러가지 application delegate method

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를 생각하시면 될 것 같습니다.

 

출처: https://support.apple.com/ko-kr/HT207582

근데 여기서 나오는 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
    'iOS/And' 카테고리의 다른 글
    • Git에 관한 간단한 이해
    • CGRect, CGPoint, CGSize에 대해
    • UserDefaults 사용하기
    • JSON(제이슨)이란
    KemiKIM
    KemiKIM
    안녕하세요! iOS App Developer를 희망하는 주니어 개발자입니다.

    티스토리툴바