UIViewController 생명주기

loadView - viewDidDisappear까지

loadView

  • 메인 뷰를 로드하기 위해 호출됩니다. UIView 인스턴스를 만들어 주는 단계로 컨트롤러에서 self.view가 nil이지만 표시해야 되는 시점에 호출됩니다.
  • 아래의 방법중 하나로 인해 연관된 nib파일이 있다면(nibName 속성이 nil이 아니라면) 로드됩니다.
    • storyboard에서 로드
    • init(nibName:bundle:)을 통해 할당
    • 앱 bundle에 viewController의 이름을 가져오는 nib파일이 존재
  • 연관된 nib파일이 없다면(nibName 속성이 nil) 빈 화면을 할당합니다.
  • 특히, storyboard에서는 필요하지 않습니다. (사용하기 위해 오버라이드하지 마세요.)
  • 뷰 컨트롤러의 루트 뷰를 빈 UIView가 아닌 커스텀 뷰로 하고 싶을 때 사용합니다.

viewDidLoad

  • 뷰 로드 이후에 호출됩니다. 뷰컨트롤러에서 사용할 객체를 초기화하거나 모델 데이터를 가져오기 좋습니다.
  • 레이아웃, 제약은 아직 정의되지 않습니다.
  • 한 번만 실행되는 작업에 적합하나 메모리 경고가 있을 경우 여러 번 호출될 수 있어 주의가 필요합니다.

viewWillAppear

  • 뷰가 보이기 직전에 반복적으로 호출됩니다.
  • 서브뷰들을 숨기거나 보이는 동작을 할 때 적합합니다.

viewWillLayoutSubviews

  • 뷰가 레이아웃을 정하기 시작하며 최상위 뷰로부터 모든 하위 뷰가 layoutSubViews()를 호출하게 됩니다.
  • 여기서 뷰의 bound가 결정됩니다.
  • 아직 제약을 걸지 않았다면, 이곳에서 걸기 적합합니다.

viewDidLayoutSubviews

  • 서브뷰의 셋업이 완료되어 보장됩니다. 따라서 추가적인 작업이 있다면 이곳에서 작업합니다.(ex. reload)

viewDidAppear

  • 뷰가 스크린에 보여지고 나서 호출됩니다.
  • 애니메이션을 시작하거나 API 호출에 적합합니다.

viewWillDisappear

  • 뷰가 사라지기거나, 다른 뷰 컨트롤러에 의해 가려질 때(모달 등) 호출됩니다.
  • 네트워킹을 제한하거나 타이머를 비활성화, 객체 반환에 좋다고 합니다.

viewDidDisappear

  • 뷰가 사라지고 나서 호출됩니다.