티스토리 뷰

iOS 기초

[swift] App의 LifeCycle

순진이 2022. 2. 26. 21:50

지난 번에는 ViewController의 life cycle에 대해서 공부해 봤는데요!!

오늘은 App의 Life Cycle에 대해서 공부해보려구요!

 

 

사실 ViewController의 라이프 사이클과 유사할 거라 생각하고 시작했는데, 생각보다 어렵더라구여 ㅠㅠ

(많이 틀렸을 수도 있음 주의 ㅠㅠ)

 


 

xcode에서 프로젝트를 만들면 자동으로 생기는 AppDelegate.swift와 SceneDelegate.swift 파일이 기억나시나요?

이게 이게 iOS13부터 생긴 놈이더라구요.

 

 

iOS12 및 그 이전에는 하나의 앱은 하나의 윈도우만 가졌기 때문에 AppDelegate가 앱에 관한 모든 걸 좌지우지 했대요. (윈도우는 그냥 단순하게 화면이라고 생각하면 좋을 것 같아요)

그래서 AppDelegate.swift 파일만 있었다고 해요. AppDelegate 혼자 앱의 시작과 끝, UI의 사이클까지 전부 관리를 했쥬.

 

 

 

그런데!!

iOS 13 이상부터 mutiple windows를 지원하게 되면서 아래처럼 한 화면에 두개의 화면을 띄울 수 있게 된거에여!

하나의 앱인데 두 개의 화면으로 표현할 수 있네?! 하나의 앱-하나의 윈도우라는 공식(?)이 깨지게 된거져. 

 

이처럼 하나의 앱이 여러개의 UI를 가지게 되면서 여러개의 화면(scene)을 관리해줄 누군가가 필요해진 거에요.

그 누군가가 바로 SceneDelegate입니다.

(근데 아이폰은 multiple windows가 없는데,,? 암툰,,,)

 

 

그래서 Scene Delegate가 UI의 lifeCycle을 담당하게 되었다는 이야기. 

 

 

AppDelegate가 하던 것을 SceneDelegate에서 하게 되면서 유사한 메서드들이 SceneDelegate에 생겨나게 되었습니다.

 

 

그렇다고 AppDelegate의 역할이 줄어든 건 아니구요. AppDelegate는 App이 실행되고 (launched), 끝나는(terminated) Process Lifecycle 이 외에도 scene들의 session을 created하고, discarded하는 일도 하게됩니다.

 

 

 

앱을 실행하고 끄는 동안 아래와 같이 AppDelegate와 SceneDelegate는 아래와 같이 동작한다고 합니다.

 

[AppDelegate]

앱이 launched된 후(didFisnishLaunching), session을 위한 설정(ConfigurationForSession)을 합니다.

 

 

[SceneDelegate]

위에서 만든 session과 연결을 하구요(willResignActive), 여기서 window에 관한 설정을 해줍니다. 그러면 이제 화면이 짠! 하고 나타난대요.

 

scene이 active되고(willResignActive), background로 돌아가고 하는 일들이 있어나구요. (didEnterBackground)

사용자가 앱 스위쳐(홈화면을 두번 누르거나, 홈바를 스와이프 업 하는 것)를 이용하여 암시적으로 scene을 닫을 때 연결이 disconnect된다고 합니다.

 

 

[AppDelegate]

그러다가 유저가 해당 앱을 스와이프하여 끝내버리면 SceneSession이 버려집니다. (didDiscardSceneSession)

 


아직 scene session에 대한 개념이 어렵긴 하네요 ㅠㅠ

혹시 틀린 게 있다면 언제든 알려주십셔 슨배님덜!!

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크