UIKit 기본개념
- iOS, iPadOS, tvOS 앱을 위한 그래픽 이벤트 기반 UI(사용자 인터페이스)를 구축하고 관리해주는 프레임 워크
- iOS, iPadOS, tvOS앱의 핵심 인프라를 구성하는 데 사용할 수 있는 구성 요소를 포함하여 앱을 구축하기 위한 다양한 기능을 제공함
- UI를 구현하기 위한 Window및 View Architecture을 제공
- 앱에 멀티 터치 및 기타 유형의 입력을 제공하기 위한 이벤트 처리 인프라 제공
- 사용자, 시스템 및 앱 간의 상호 작용을 관리하기 위한 Main run loop 제공
- 애니메이션, 문서, 드로잉 및 인쇄, 텍스트 관리 및 디스플레이, 검색, 앱 확장, 리소스 관리 및 현재 장치에 대한 정보 얻기를 지원
- 접근성 지원을 사용자 정의, 다른 언어, 국가 또는 문화 지역에 맞게 앱의 인터페이스를 현지화할 수 있음
<aside>
⚠️ 해당 클래스에 대한 문서에 달리 명시되지 않는 한, 앱의 Main Thread 또는 Main Dispatch Queue에서만 Uikit 클래스를 사용하셈. 이 제한은 특히 UIResponder에서 파생되거나 어떤식으로든 앱의 사용자 인터페이스를 조작하는 클래스에 적용됨
</aside>
<aside>
💡 시스템은 앱 번들안에 있는 Info.plist 파일을 통해 앱의 구성 및 기능에 대한 정보를 도출함
</aside>
Structure of APP

UIKit 앱의 상당히 전형적인 구조를 나타냄
- UIKit은 앱의 View layer들과 Controller 안의 대부분의 object들을 제공함. 특히, 일반적으로 화면에 콘텐츠를 표시하는 UiView 클래스를 정의함(Metal 및 기타 시스템 프레임워크를 사용해 콘텐츠를 화면에 직접 렌더링 할 수도 있음)
- UIApplication 객체는 앱의 Main Event Loop를 실행하고 앱의 전체 수명 주기를 관리함
- UIApplication은 iOS에서 실행되는 앱의 중앙 집중식 제어 및 조정 지점
Main Run Loop

- Main run loop는 이벤트들을 받은 순서대로 처리한다.
UIApplication
객체는 앱이 실행될 때, Main run loop를 실행하고 해당 run loop로 이벤트를 처리하게됨
- 사용자가 디바이스에서 특정 액션을 취하면, 그 액션에 해당하는 이벤트가 시스템에 의해 생성되어 UIKit에서 생성한 port를 통해 앱에 전달됨
- 그리고 전달된 이벤트들은 queue에 하나씩 보관되었다가 main run loop로 전달되어서 처리가 된다.