컴퓨터언어/Swift

[Swift] 앱의 생애주기 App Lifecycle

bbanpro 2020. 4. 16. 19:06
728x90
반응형

실행 -> 눈에 보임 -> 백그라운드로 돌아감 -> 메모리 해제

 

 

 

func application(_:didFinishLaunchingWithOptions:)

AppDelegate는 앱을 실행했어요

 

func scene(_:willConnectTo:options:)

SceneDelegate는 화면을 생성했고 새 창을 열거래요

 

viewDidLoad()

ViewController는 띄워질 화면의 정보를 알아왔어요

 

viewWillAppear()

ViewController가 그 화면을 곧 띄울 거에요

 

func sceneWillEnterForeground()

SceneDelegate는 그 화면을 제일 앞에 위치시킨대요

 

func sceneDidBecomeActive()

SceneDelegate가 그 화면을 활성화시킨대요

 

viewDidAppear()

화면이 짠 나타났어요

 

viewWillDisappear()

지금 이 화면이 곧 완전히 사라질 거래요

 

viewDidDisappear()

화면이 완전히 사라져버리고 말았어요

 

func sceneWillResignActive()

홈 네비게이션 바를 swipe 했을 시 나오는 App 실행 목록을 보고 있어요

 

func sceneDidEnterBackground()

다른 App을 실행함으로써 background로 돌아가게 되었어요

 

func sceneDidBecomeActive()

다시 그 App으로 돌아왔어요

 

func sceneDidDisconnect()

SceneDelegate는 유저가 App을 스와이핑한 것을 보았어요

 

didDiscardSceneSessions

AppDelegate는 App을 종료했어요

 

 

OS(운영체제)는 iPhone의 CPU 및 RAM의 최적화를 위해

 

User가 지금 이 순간 보고 있는 화면만을 최우선순위에 둔다.

 

이 말은 앱을 실행은 했지만 현재 보고 있지 않아서 백그라운드에서 돌아가고 있는 앱들,

 

예를 들어, 웹서핑하다가 카톡푸시알림이 와서, 그 알림 눌러서 카톡 바로 들어온 경우,

 

기존에 하던 웹브라우저는 우선순위에서 밀리게 된다는 것이다.

 

이를 메모리의 "재배치"라고 한다.

 

여기에 중요한 이슈가 있다.

 

만약 OS가 보고 있던 앱의 그때 그 상태를 저장하지 못했다면 어떻게 될까?

 

User가 게임 중이었거나 사이트에서 폼 입력을 하고 있었다면, 해당 정보는 모두 잃어버릴 것이다.

 

이는 매우 심각하겠지.

 

따라서 User와 상호작용해왔던 그 정보들을 "적시에" 저장하는 것이 관건인데, 그게 언제일까?

 

OS는 User가 홈버튼을 눌러서 메인으로 빠져나가거나 푸시 메시지를 눌러 다른 화면으로 빠져나가기 전에 집중해야 한다.

 

즉 현재 fore-ground의 앱이 back-ground로 전환되기 전에 저장을 마쳐야 한다.

 

이를 위해 존재하는 것이 App의 LifeCycle이고,

 

AppDelegate와 SceneDelegate, UIViewController는 각각 분담하여 이를 처리한다.

 

AppDelegate.swift : OS가 해당 App에게 너가 현재 어느 LifeCycle에 존재하는지 알려주는 파일.

App 내에서의 LifeCycle을 담당함.

 

SceneDelegate.swift : iOS 13 이후 가능해진 멀티스크린에 대응하기 위해 기존 버전들의 AppDelegate에서 분기된 파일.

App이 백그라운드로 돌아갈때를 담당함.

여기에 적힌 함수 안에 코드를 적어 넣으면, User의 예상할 수 없는 각종 상황에 따른 장면전환(ex.게임하는데 걸려온 부장님 전화)에도 정보를 잃지 않을 수 있다.

App의 현재 LifeCycle에 맞추어 현재 정보를 다룰 수 있도록 함.

 

 

728x90
반응형