iOS Swfit UIKit ViewController Lifecycle
포스트
취소

iOS Swfit UIKit ViewController Lifecycle

안녕하세요. narvis2 입니다.
이번시간에는 iOS UIKit ViewControllerLifecycle 에 대하여 알아보도록 하겠습니다.

🍀 ViewController Lifecycle


Desktop View

☘️ Init

  • ViewController의 초기화를 진행하면 내부의 객체들을 초기화하는 작업이 수행됨
    • ⚠️ 아직 내부의 View들이 생성된 것은 아니기에 내부 View 요소에는 접근할 수 없음
  • init(coder:) 👉 스토리보드를 기반으로 ViewController를 만들 경우 사용
  • init(nibName: bundle:): nib 파일을 기반으로 ViewController를 만들 경우 사용

    ✅ 참고

    • nib 👉 NeXT Interface Builder (binary 기반), 인터페이스 빌더에서 생성한 객체들을 저장하는 파일, UI를 구성하는 객체들과 이들의 세부설정, 각 객체들간의 관계등을 포함합니다.

☘️ loadView

  • ViewController가 사용자가 설정한 View를 자신의 최상위 View로 설정하는 과정
  • ViewController가 무엇을 기반으로 호출되었는가(Code, 스토리보드, nib)와 관계없이 호출됨
  • 내부적으로 instantiateWithOwner()라는 메서드가 실행되면서 필요한 subView들을 nib으로부터 unarchiving하고 subView 객체들이 ViewController와 연결 되게 됩니다.
    • 이 때 subView 객체들은 로드가 끝나자마자 awakeFromNib()을 호출합니다.
    • subView들은 ViewController가 아니기 때문에 바로 내부 객체들에 접근할 수 있음.
  • subView들과 연결이 완료되면 ViewControllerviewDidLoad()를 호출 하여 view 들에 대한 load가 완전히 종료되었음을 알림

☘️ viewDidLoad

  • 필요한 View의 정보들이 모두 메모리에 위치되면 호춛됨
  • 필요한 데이터를 갱신하는 코드를 작성
  • ViewController의 생애중 단 한번만 호출됨

☘️ viewWillAppear

  • ViewControllerView가 화면에 나타나기 직전에 호출됨
  • 화면이 나타날때마다 호출 되므로 다른 View에서 돌아올 때 수행하고 싶은 행위 들에 대해 처리하기 좋음

☘️ viewDidAppear

  • ViewControllerView가 모두 화면에 나타나면 호출됨
  • 주로 UIAnimation을 실행 시키거나 비디오 및 소리를 재생 시키거나 dataupdate를 수행
  • API data를 받아와 화면을 update하는 로직을 위치시키기에 적당

☘️ viewWillLayoutSubviews

  • viewbounds를 정하는 단계
  • UIViewlayoutSubviews() 메서드가 트리거되기 직전에 호출
  • 가로모드 혹은 세로모드가 되면서 screen의 방향이 변화될 때도 호출
  • Viewbounds에 대한 재계산이 필요할때마다 호출

☘️ viewDidLayoutSubviews

  • layoutSubviews() 메서드 호출 후에 호출
  • sub View들의 sizeposition, constraint들이 적용이 완료된 상태
  • 가로모드 혹은 세로모드가 되면서 screen의 방향이 변화될 때도 호출
  • Viewbounds에 대한 재계산이 필요할때마다 호출

☘️ viewWillDisappear

  • 다른 ViewController로 화면이 전환되면서 원래 ViewController가 사라질 때 호출
  • 일반적으로 이 함수를 override 해서 처리해야 할 작업은 거의 없음

☘️ viewDidDisappear

  • ViewController가 화면에 사라지고나면 호출
  • Container View Controller를 사용하다보면 여러 ViewController가 메모리에 유지

    ⚠️ 즉, 화면에서 사라진 ViewController도 여전히 notification 등의 이벤트를 받을 수 있다는 것

  • notification, observing 취소 및 디바이스 점검 등을 수행

☘️ deinit

  • ViewController 객체가 메모리에 사라지기 전 호출
  • 주로 할당받은 자원중 ARC에 의해 해제가 되지 않는 자원을 해제하기 위해 override
  • 화면에서 사라진다고 해당 메서드가 호출되는 것은 아님

☘️ didReceiveMemoryWarning

  • 메모리가 부족해지면 호출
  • 이를 관리해 필요없는 메모리를 해제 하는 작업을 할 수 있음
  • iOS강제로 Application을 종료하는 것을 방지 하기 위해 필요
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.