iOS

[iOS] iOS 뷰 계층 구조

guswlsdk 2025. 2. 17. 17:03
반응형

UIWindowScene

https://developer.apple.com/documentation/uikit/uiwindowscene

 

UIWindowScene | Apple Developer Documentation

A scene that manages one or more windows for your app.

developer.apple.com

 

 

앱의 하나 이상의 UIWindow를 관리하며 UIScene을 상속 받고 있기 때문에 관련 메서드 및 프로퍼티에 접근 가능하다.

windows - window는 여러 개 가질 수 있다.

keyWindows - 윈도우가 여러개 존재할 때 가장 앞쪽에 배치된 윈도우이다.

screen - 화면에 보이는 그 자체(UIScreen 객체이니 hardward 영역인 것 같음)

 

UIScene 및 UIWindowScene 모두 delegate를 지니고 있으며 scene의 상태가 변경되면 scene 객체는 delegate에 알리며

Scnen의 생명주기 이벤트에 적절하게 반응할 수 있도록 한다.

 

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
}

 

 

UIWindow

UIWindow는 UIView를 상속 받고 있지만 직접 content을 가지지 않는다. content을 가진 UIView를 배치하여 화면에 출력한다.

화면이 전환되더라도 Window 내부에 배치된 UIView가 변경될 뿐 Window는 변경되지 않는다.

앱을 종료하는 경우에만 사라진다.

 

 

UIViewController

위에서는 UIWindow에서 View를 내부에 배치한다고 하였다. 하지만 정확하게는 UIViewController를 통해 View를 관리한다.

window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = MyViewController()
window?.makeKeyAndVisible()

 

UIWindow - UIViewController - UIView 관계로 UIViewController가 둘 사이를 중계하는 구조이다.

UIWindow는 UIViewController를 통해 제공되는 View를 참조할 뿐 View를 직접 관리하지 않는다.

UIViewController의 main view (VC에서 self.view)를 window의 subView로 함

 

UIView

content를 화면에 표시하고 사용자로부터 이벤트를 받는다.

 

 

 

 

 

iOS에서 뷰를 계층적으로 관리하는 구조를 알고 싶었다.

 

1. 앱 마다 UIApplication 인스턴스 하나가 싱글톤으로 생성된다.

   1-1. UIApplication의 UIApplicationDelegate가 UISceneSession을 생성한다.

2. UISceneSession(UIApplication)은 UIWindowScene을 관리한다.

   2-1 두개 이상의 UIWindowScene도 관리 가능 - 멀티 윈도우

   2-2. 멀티 윈도우는 여러 개의 UIWindowScene을 가짐으로써 가능하게 됨 ex) iPad에서 두 개의 사파리 브라우저 실행

3. UIWindowScene은 여러 개의 UIWindow를 관리한다.

4. UIWindow마다 UIViewController를 가진다.

5. UIViewController는 UIView를 관리한다.

 

UIAppllication은 iOS 시스템이 관리한다. (스프링보드, 커널, 런처 등..)

 

반응형