티스토리 뷰

iOS 프로젝트를 만들면 메인 스토리보드와 AppDelegate.swift, SceneDelegate.swift 파일이 기본 생성되어 있다. UIkit framework에서 delegate는 이벤트를 처리할 수 있는 대리자를 뜻한다. 따라서 AppDelegate는 Application 레벨에서 발생하는 이벤트를, SceneDelegate는 Scene 레벨에서 발생하는 이벤트를 처리한다는 뜻이다.

Scene 
원래는 하나의 application이 하나의 scene을 가지고 있었기 때문에 이 둘을 구분할 필요가 없었지만 iPadOS가 등장하고 iPad에서 하나의 화면에 여러 application을 실행할 수 있게 되면서 이 둘의 관계가 더이상 1:1이 아니게 되었다.

이렇게 생성되는 이벤트가 어떤 상황에 어떤 순서로 발생하는지 알아보자. 그러면 그에 맞는 처리를 해당 delegate 함수에서 수행하도록 만들 수 있다.

각 이벤트 함수에 로그를 출력하도록 print를 작성 후 실행시켜 보자.

 

실행 직후 로그

 

Application이 실행되면 가장 먼저 SceneSession에 연결하고 그 이후는 SceneDelegate에서 처리한다. session이 연결되면 scene이 foreground로 올라오며, 활성화 된다.

 

홈 버튼을 두번 누르거나 길게 쓸어올려서 실행중인 앱 화면으로 진입한다.

 

실행중인 앱을 볼 수 있는 화면으로 진입한 후의 로그를 보면 scene이 deactive 되지만 여전히 foreground 에 머물고 있다는 것을 알 수 있다.

 

홈으로 돌아왔을 때

 

여기서 완전히 홈 화면으로 진입하면 또 이벤트가 발생한다. 이제는 scene이 background로 들어가며, AppDelegate에서 현재 상태를 저장한다.

 

프로세스를 종료하지 않고 다시 실행

 

홈 화면에서 다시 앱을 실행하면 SceneDelegate에서만 이벤트를 처리한다. 아직 SceneSession이 유지되고 있어서 session에 연결을 시도하지 않는 것 같은데 이 session이 언제 끊어지는지는 더 많은 테스트를 해 봐야 될 것 같다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함