프로그래밍/iOS

[iOS] UI 계층 구조 정리

turu 2021. 9. 23. 23:17

UIScene

앱의 ui의 하나씩의 instance를 의미함

  • 앱을 실행하고 Debug View Hierarchy 를 실행하면 나오는 계층에서, 맨 위에 있는게 UIWindowScene인데, 이게 사실 UIScene이라고 보면 될 것 같다.
  • 사진처럼 실제로는 이걸 상속한 UIWndowScene 객체를 직접 사용하는듯

UIWindowScene

  • 이것의 delegate가 SceneDelegate임(UIWindowSceneDelegate)
  • UIScene의 서브 클래스
  • App의 하나 이상의 Window를 관리한다.
  • 직접 만드는 객체가 아님(OS가 생성)

UIWindowSceneDelegate

  • UISceneDelegate에서 확장된 프로토콜
  • UIWindowScene의 lifcycle 이벤트별로 호출되는 함수를 사용할 수 있음
  • 이 프로토콜이 구현된 객체를 사용해서 1개의 유저 인터페이스의 생명주기를 관리할 수 있음(유저 인터페이스 = 앱?)
  • 여기에 구현된 함수들은 앱이 foreground, backgournd로 들어갈 때 처럼 scene connect, disconnect 될 때 notification을 받아서 호출됨

UISceneSession

  • 앱의 scene에 대한 정보가 들어있는 객체
  • 단 하나의 UIScene의 lifecycle을 관리하며 유지되고 있는 interface 상태들을 가지고 있음
  • scene들은 이 session을 사용해서 connect & disconnect 된다
  • 직접 만드는 객체가 아님(OS가 생성)

UIWindow

  • 유저 인터페이스와 이벤트를 발송하는 뷰 사이에 있는 객체(UIView)
  • 어렵게 생각하지말고 구현부만 보면 단순히 UIView의 서브클래스이다
  • 기본적으로 Xcode는 스토리보드를 사용하여 기본 window를 제공하며 이때 스토리보드에서는 Xcode 템플릿이 자동으로 제공하는 app delegate에 window 속성이 있어야 함
  • 만약 앱이 스토리보드를 사용하지 않는다면 반드시 window를 생성해야 한다
  • 계층적으로 부모인(부모클래스X) UIWindowScene을 참조하는데 상향식 참조이므로 weak 하게 참조하고 있는 점을 확인 할 수 있다

UIScreen

  • 하드웨어 기반 디스플레이와 관련된 속성을 정의한 객체
  • 픽셀단위에 대한 정보는 여기에 있는 듯 하다(디바이스 크기 등)

 

## 참고 이미지

반응형