2020. 4. 16. 19:06ㆍ컴퓨터언어/Swift
실행 -> 눈에 보임 -> 백그라운드로 돌아감 -> 메모리 해제
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에 맞추어 현재 정보를 다룰 수 있도록 함.
'컴퓨터언어 > Swift' 카테고리의 다른 글
[Swift] Sandbox : 보안을 위한 App별 독립공간 (feat. NSCoder) (0) | 2020.04.19 |
---|---|
[Swift] Attempt to set a non-property-list object : 커스터마이징한 데이터 타입은 UserDefault에 담지 말자! (0) | 2020.04.19 |
[Swift] 피보나치 수열 만들어보기 (0) | 2020.04.14 |
[Swift] MARK: - 나만의 주석으로 코드 구역설정하기 (0) | 2020.04.13 |
[Swift] Extension : 원래 있던 class/struct에 커스텀 기능추가하기 (0) | 2020.04.13 |