UIViewController를 알아보기 전에 UIView에 대해서 알아보자.
View는 라이브러리에서 캔버스로 드래그하거나 프로그래밍 방식으로 뷰의 초기 크기 및 위치를 지정하여 스토리보드에서 생성할 수 있다. UIView 클래스는 frame, bounds, center, transform, alpha, backgroundColor를 포함하여 애니메이션이 가능한 여러 속성을 정의한다.
https://developer.apple.com/documentation/uikit/uiview
이외에도 ViewController는 관리하는 View의 생명 주기를 관리하는 데 중요한 역할을 한다.
ViewController가 메모리에 로드 -> viewDidLoad()
View가 표시되거나 숨겨지기 직전 / 직후 -> viewWillAppear(_:) / viewWillDisAppear(_:)
View가 표시되거나 숨겨진 직후 / 직전 -> viewDidAppear(_:) / viewDidDisappear(_:)
표준 UIController이외에도 UITableViewController, UINavigationController 등의 특수 기능을 제공하는 하위 클래스가 있다.
앱 동작을 정의하기 위해 UIViewController의 사용자 정의 하위 클래스를 만드는 것이 일반적이다. 이러한 Custom ViewController는 앱의 모양 및 사용자 상호작용에 응답하는 방식을 정의하는 역할을 한다.
ViewController가 View와 하위 View를 생성하면 해당 View의 유일한 소유자되어 생성, 수정, 제거를 포함하여 해당 View의 생명주기를 관리한다. View를 수동으로 만드는 경우 각 ViewController는 고유한 View 세트를 만들어야 한다. 서로 다른 ViewController간에 View를 공유하는 것은 불가능하다. 또한 ViewController가 할당 해제될 때 하위 View에 대한 참조를 해제해야 메모리 누수 및 기타 문제를 방지할 수 있다.
https://developer.apple.com/documentation/uikit/uiviewcontroller/
AutoLayout은 앱의 내부 변경에 대한 동적 응답을 허용한다. 레이블이 긴 텍스트 문자열을 표시하거나 이미지가 다른 크기로 대체되는 경우와 같이 뷰 내부 콘텐츠가 변경되는 경우 추가 코드 없이 새 콘텐츠를 수용할 수 있도록 뷰 계층 구조의 레이아웃을 조정할 수 있다.
예를 들어 가변적인 텍스트를 표시하는 레이블이 있는 경우 레이블의 위치와 크기에 제약을 설정하여 컨테이너 뷰에 맞도록 지정한다. 레이블의 텍스트양이 변경되면 AutoLayout은 라벨의 크기를 동적으로 조정하여 지정된 제약조건을 유지하여 컨테이너에 맞추도록 할 수 있다.
텍스트가 레이아웃에 영향을 미치는 것 외에도 글꼴 크기를 변경하면 다른 요소의 레이아웃에도 영향을 미칠 수 있기 때문에 이러한 변경 사항을 동적으로 처리하는 데 도움이 된다.
frame-based 및 autoresizing mask에 비해 AutoLayout은 더 큰 유연성과 적응성을 제공한다. 다양한 장치 화면 크기 및 방향을 지원하고 다양한 언어 및 지역에 맞게 앱을 현지화하기 더욱 수월하다. 하지만 View와 제약이 많은 복잡한 사용자 인터페이스의 경우 구현이 복잡해질 수 있다.