ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] View Controller의 생명주기
    iOS 2021. 9. 4. 16:26

    목차

    1.  뷰 컨트롤러 생명주기

    2. 생명주기에 따라 호출되는 함수

    3. 실험


    뷰 컨트롤러 생명주기

    뷰 컨트롤러는 생명주기(life cycle)를 가집니다. 애플의 공식문서에서는 뷰 컨트롤러의 생명주기를 아래의 그림으로 표현하고 있습니다.

    View Controller Life Cycle - Apple

     

    위의 그림에는 loadView, viewDidUnload 가 없지만 이 두개의 메소드도 생명주기에 포함됩니다.

     


    생명주기에 따라 호출되는 함수

     

    loadView

    loadView는 뷰컨트롤러에 의해 관리됩니다. 뷰가 없다면 loadView가 호출되고 뷰를 생성한 후 뷰 컨트롤러의 슈퍼뷰로 올립니다. 뷰 컨트롤러가 코드로 생성되었을 때 사용하면 됩니다. 뷰 컨트롤러가 .xib 또는 스토리보드로 생성되었을 때는 이 메소드를 건드리지 않는게 좋습니다.

     

    viewDidLoad

    loadView된 후 뷰가 처음으로 로딩되었을때 이 메소드가 호출됩니다. 이 메소드는 생명주기에서 단 한번만 실행됩니다. 그러므로 viewDidLoad를 통해 뷰가 처음 나타날시에 필요한 초기화를 이곳에서 하면 됩니다. 

     

    viewWillAppear

    뷰가 나타나기 직전에 항상 호출됩니다. 뷰가 나타나기 전에 수행하고 싶은 코드가 있다면 이곳에서 하면 됩니다.

     

    viewDidAppear

    뷰가 화면에 나타날때마다 호출됩니다. viewDidLoad는 뷰가 처음 나타날시에 한번만 호출되고 viewDidAppear는 뷰가 사라졌다가 다시 나타날때마다 호출됩니다. 여기서 사라졌다는 말은 뷰가 메모리에 남아있는채 다른 뷰컨트롤러에 가려지는 등의 disappearing이 되었을 때를 말합니다. 그리고 뷰가 처음 나타났을 때 viewDidLoad만 호출되는 게 아니라 viewDidAppear도 호출됩니다.

     

    viewWillDisappear

    뷰가 화면에서 사라지기 전에 호출됩니다. 아직 뷰는 뷰계층에 남아있지만 곧 제거되기 직전에 호출되는 것입니다. 그러므로 뷰의 정보들이 사라지기 전에 이 정보들을 저장하는 코드가 필요하다면 이곳에서 하면 됩니다.

     

    viewDidDisappear

    뷰가 뷰계층에서 완전히 제거되고 난 후 호출됩니다.

     

    viewDidUnload 또는 denit

    뷰가 메모리에서 해제되기 전에 호출됩니다. 뷰를 사라지게 하면 바로 메모리에서 해체될수도 있지만 네비게이션 컨트롤러에서는 뷰컨트롤러의 메모리를 갖고 있을수도 있습니다. 뷰가 사라지면 반드시 메모리에서 해제되는 것은 아니니 주의하시기 바랍니다.

     

     


    실험

    총 3개의 뷰컨트롤러로 이루어져 있고 아래의 코드를 두번째 뷰컨트롤러에 추가하였습니다. 

     

    실험 방식

    1. 첫번째 뷰컨트롤러에서 스와이프로 두번째 뷰컨트롤러로 이동

    2. 두번째 뷰컨트롤러에서 스와이프로 첫번째 뷰컨트롤러로 이동

    3. 1번과 똑같이 수행

    4. 두번째 뷰컨트롤러에서 버튼 클릭으로 세번째 뷰컨트롤러로 이동

    5. 세번째 뷰컨트롤러에서 화면 터치로 두번째 뷰컨트롤러로 이동

    6. 2번과 똑같이 수행

     

     

    두번째 뷰컨트롤러가 appear되고 disappear될때 혹은 load되고 deinit 될때의 해당 함수들이 잘 호출되는 것을 볼 수 있습니다.

     

     

     

     


    Reference

    https://developer.apple.com/documentation/uikit/uiviewcontroller

    https://medium.com/good-morning-swift/ios-view-controller-life-cycle-2a0f02e74ff5

     

     

     

     

     

    댓글 0

Designed by Tistory.