iOS Life Cycle

iOS Life Cycle

AppDelegate 에도 applicationDidBecomeActive 가 있고

SceneDelegate 에도 sceneDidBecomeActive가 있다.

하지만 AppDelegate의 applicationDidBecomeActive는 작동하지 않는다.

?? 아비규환이다. 내 머리속 혼돈이 지나가고 있다. 정리할 필요가 있다. 정리해보자

Life Cycle

우선 3가지 분류와 분류 속 5가지 상태가 있음을 알아야한다.

3가지 분류

  • Foreground

  • Background

  • 그 외

5가지 상태

  • Foreground

    • Active

    • Inactive

  • Background

    • Background
  • 그 외

    • Not running

    • Suspended

앱 실행

Not Running -> Foreground(진입) -> Active

willFinishLaunchingWithtOptions

AppDelegate

didFinishLaunchingWithOptions

AppDelegate

willConnectTo

SceneDelegate

sceneWillEnterForeground

SceneDelegate

sceneDidBecomeActive

SceneDelegate

먼저 Scene이 작동되기 전에 당연하게 App 이 실행되어야 함

그래서 AppDelegate의

willFinishLaunchingWithOptions -> didFinishLaunchingWithOptions 가 실행된다.

그리고 SceneDelegate 함수들이 작동한다.

willConnectTo -> sceneWillEnterForeground -> sceneDidBecomeActive 가 실행된다.

여기서 주의해야 할 점은 Active가 되기 위해서는 반드시 InActive를 거쳐야 한다는 것이다.

앱 Background로 돌리기

sceneWillResignActive

SceneDelegate

sceneDidEnterBackground

SceneDelegate

앱 실행시와 마찬가지로 Active는 반드시 InActive로 바뀌고 난 후에 상태 변경이 가능하다.

앱 종료

시뮬레이션에서 앱 종료 시연을 하려고 했는데 함수 실행이 안된다. 왜 그런지 아시는 분? ㅠㅠ

비정상적인 종료만 해서 그런가 ㅠ.ㅠ 하지만 이론적으로만 설명!

applicationWillTerminate

AppDelegate

앱이 백그라운드에 들어간 후에 메모리가 줄어든다면 iOS에서 사용하지 않는 앱을 Kill 한다.

그럴 때 applicationWillTerminate를 실행한다.

공부하면서 느낀 궁금증

왜 AppDelegate 함수는 실행 안되지?

생각해보면 AppDelegate에도 Foreground, Background 관련된 메소드가 있었다.

하지만 진작 실행은 안된다 왜일까??

정답은 공식문서에 있었음

scene을 사용한다면 UIKit은 이 메소드를 부르지 않는다.

SceneDelegate에서 설정해라. 라는 말이다.

Inactive의 기능은 무엇일까?

Foreground의 Inactive는 말 그대로 앱이 Foreground(전반)에 있지만 active 하지 못할 때이다.

  • 시리가 켜지거나

  • 전화 알림

  • Alert 뜨는 상황

즉, 사용자로부터 이벤트를 받지 못하는 상황이다.


참고한 문서

Apple Developer

Manasa M P's Medium