답변
=> UIViewController
ViewController는 뷰의 계층구조를 관리하며 데이터가 변경됨에 따라 소유하는 뷰의 컨텐츠를 업데이트하는 로직을 관리 할 수 있음.
또한 UIResponder의 객체로써 하위 계층의 이벤트 체인에 따라 사용자와 상호작용하여 이벤트를 처리할 수 있음.
UIViewContorller
UIKit 앱의 뷰 계층 구조를 관리하는 *UIResonder의 객체.
뷰의 사용자 상호작용에 응답하며 전체 인터페이스의 레이아웃을 관리함.
데이터가 변경되면 뷰의 콘텐츠를 업데이트 할 수 있음.
컨텐츠는 UIView로 구성되며 UILabel, UIButton 등과 같은 UIView 타입의 컴포넌트들이 UIViewController에서 관리될 수 있음.
View Management
- 가장 중요한 역할로써 뷰의 계층을 관리함.
- 모든 뷰컨트롤러마다 RootView를 지니며, 화면에 표시하기 위해서는 해당 RootView 계층에 속해야함
- ViewController에는 두 가지 타입이 존재함
- Content View Controllers
- 모든 뷰를 단독으로 관리함
- UIViewController, UITableViewController, UICollectionViewController등
- Container View Controllers
- 자체 뷰 + 하나 이상의 Child View Controller가 가진 루트뷰를 관리함
- 컨테이너에는 컨텐츠를 관리하는 것이 아니라 루트뷰를 관리하며 컨테이너 디자인에 따라 크기를 조정함
- Child View Controller의 내용을 관리하지는 않고, 크기 조정 및 배치만 관리함.
- 실제 화면 구성과 이벤트 관리는 Child View Controller 에서 이뤄짐
- • UINavigationController, UITabbarController, UIPageViewController 등
- https://developer.apple.com/documentation/uikit/view_controllers/
에서 Content View Controller와 Container View Controller를 정의하고 있음
Data Marshaling
- 자신이 관리하는 View와 Data간 중개 역할 (MVC)
- 객체의 메모리 구조를 저장이나 전송을 위해서 적당한 자료형태로 변형함
User Interactions
- Responder 객체로써 유저와 상호작용 할 수 있음.
- 직접 이벤트를 받아서 처리하는것이 가능하나 일반적으로 지양됨 → 왜?
- 뷰의 터치 이벤트와 같은 것들을 객체(보통 뷰컨트롤러)에 action 메서드나 delegate로 전달
Resource Management
- 뷰컨트롤러가 생성한 모든 뷰와 객체들은 뷰컨트롤러의 책임
- UIViewController의 생명주기에 따라서 생성되었다가 자동소멸되기도 하며 ARC 개념에 맞게 관리가 필요함
Adaptivity
- 뷰컨트롤러는 뷰의 표현을 책임지며 현재 환경에 따라 적절하게 컨텐츠를 표현함
- ex) 가로, 세로화면의 디바이스 방향 또는 디바이스 크기에 따라 UI 요소를 선택적으로 표시하거나 조절함
https://jinshine.github.io/2018/06/04/iOS/UIViewController/
*UIResponder
: 이벤트에 응답하고 처리하기 위한 추상 인터페이스
@MainActor
class UIResponder : NSObject
UIApplication, UIViewController, UIView 등의 핵심 객체들은 모두 리스폰더임.
이벤트(터치, 모션, 제어 등)가 발생하면 UIKit,은 이를 처리할 수 있도록 앱의 리스폰더 객체에 전달함.
(즉, UIApplication, UIViewController, UIView가 발생한 이벤트를 다룰 수 있게됨)