Programming/Mac & iOS

[iOS] UIViewController 심층 분석

MB Kyle KWON 2017. 8. 23. 11:51

View Controller


    View controller는 앱의 UI를 꾸미는 view들을 관리한다. 개발할 기능과 시각적 요소를 제공하기 위해서 view controller를 상속받아 클래스를 구현한다. view controller는 관리하고 있는 view들과 엮여 있으며 event를 처리하기 위한 Responder chain에 관여한다. view controller는 UIResponder 객체로서, 해당 view controller의 root view와 super view 사이의 Responder chain에 위치한다. view controller의 view가 event를 처리하지 않는다면 해당 event를 super view로 넘길 수 있다. 그리고 다른 view controller를 container view controller에 표시할 수 있다.


Responder Chain




Storyboard와 Nib file


    Storyboard를 사용하면 view controller의 view들을 정의할 수 있고, 각 view controller의 관계를 segue를 통하여 정의할 수 있다. Nib 파일을 사용하면 각 view controller와 연관된 view들을 정의할 수 있다. storyboard처럼 각 view controller간의 관계를 정의할 수 없다. storyboard나 nib이 아닌 코드로 custom view를 정의할 경우, view controller의 view들은 loadView() 메소드에서 정의합니다. view controller의 root view 또한 loadView()에서 생성한다.



View controller와 View


    view controller는 자신이 가지고 있는 view들의 유일한 소유자이다. 이 소유권은 view controller가 해제될 때까지 유지된다. nib 파일이나 storyboard에 view를 정의했을 경우, view controller에서 view를 불러올 때 복사본이 생성되어 소유하게 된다. 즉, 다른 view controller에서도 사용 가능하여 재사용성이 높아집니다. 하지만 view controller 내부에 정의된 view의 경우에는 해당 view controller만 소유할 수 있다. root view는 view controller에 정의된 전체 영역에 맞게 자동으로 맞춰진다. root view에 올라가는 각 subview들은 autolayout과 같은 기능을 사용하여 개발자가 직접 사이즈와 위치를 정의할 수 있다.



addSubView와 addChildViewController (Container View Controller)





참고 : Apple documents - UIViewController