뷰의 생애주기?

주방·2022년 7월 17일
0

Swift

목록 보기
8/17
post-thumbnail

#1. Checklist

  • ViewController Transtition
    • Show / Modal
    • Push-Pop / Present-Dismiss
    • Segue
    • Unwind / UIStoryboardSegue
    • Presentation / Transition Style
  • ViewController LifeCycle
    • ViewDidLoad / ViewWillAppear / ViewDidAppear / ViewWillDisappear / ViewDidDisappear
    • 뷰 컨트롤러 구조와 화면 전환 스타일에 따라 뷰컨트롤러의 생명주기 호출 시점이 어떻게 달라지는지 확인하기
  • UserDefaults

1) View Controller의 생애주기

  1. 흐름

    a. init

    b. loadView

    c. viewDidLoad

    d. viewWillAppear

    e. viewDidAppear

    f. viewWillDisappear

    g. viewDidDisppear ----------> viewWillAppear

    h. viewDidUnload ----------> loadView

  2. 세부내용

    a. viewDidLoad

    • 이 메서드는 뷰 컨트롤러가 뷰 계층 구조를 메모리에 처음 로드될 때 한 번 호출된다. 메모리 오류로 뷰가 삭제되지 않으면 재호출 되지 않는다.
    • 뷰의 계층 구조의 맨 위에 생성되고, story board에서 load될 때 호출된다.
    • 화면에서 보여지는 뷰가 바뀌면, 뷰 컨트롤러는 자동으로 특정한 메서드를 호출해 이 변화에 다른 클래스들이 반응 할 수 있도록 한다.
    • viewWillAppear 같은 메서드를 사용해 뷰에 보여줄 컨텐츠를 미리 로드하여 준비하고, viewWillDisappear 같은 메서드를 활용해 삭제될 중요 정보를 미리 따로 저장할 수 있다.
    • 즉, '뷰'라는 것을 만들고, 메모리에 올려야 접근이 가능하다.

    b. viewWillAppear

    • 뷰가 게층에 추가되고, 화면에 표시되기 직전에 수행한다. 화면이 새로 올라올 때마다 수행하기 때문에 그때마다 수행할 작업을 표시하는 식의 역할을 담당시키기에 유용하다. 뷰의 추가적인 초기화 작업을 하기 좋은 시점이다.
    • 다른 뷰로 이동했다가 되돌오면 재호출 되는 메서드이다. 그래서 화면이 나타날 때마다 수행해야 하는 작업을 하기 좋은 시점이다.
    • Content view가 화면에 표시되기 전에 발생해야 할 작업을 trigger한다.
    • 만약 system이 method를 호출한다고 해서 content view가 표시된다는 보장이 없다.
    • viewDidLoad와 기능적으로 어떤 차이가 있는가?
      • view 1이 생성될 때, viewDidLoad(), viewWillAppear()가 각각 호출된다.
      • 이후, view1에서 view2로 이동할 때, 역시 viewDidLoad(), viewWillAppear()가 호출된다.
      • 그러나, view2에서 view1으로 이동하면, view1에서는 viewWillAppear()만 호출된다. 왜냐하면 viewDidLoad()은 처음 생성될 때 딱 한번만 호출되기 때문이다.
    • 즉, 뷰가 나타나가 직전에 호출된다.

    c. viewDidAppear

    • 뷰가 화면에 표시된 이후에 수행한다. 뷰를 보여줄때, 필요한 추가적인 작업을 담당한다.
    • view가 화면에 표시되는 즉시 발생해야 하는 모든 작업을 trigger한다.(데이터 가져오기, 애니메이션 표시 등)
    • 뷰가 나타났다는 것을 컨트롤러에 알리는 역할을 한다.

    d. viewWillDisappear

    • 뷰가 계층에서 사라지기 직전에 수행한다. 뷰를 생성하고 나서 했던 행동들을 되돌리는 작업을 하거나 작성 도는 선택된 정보들이 삭제되기 전에 저장해두는 작업을 수행한다.
    • 뷰가 생성된 뒤 발생한 변화를 이전 상태로 되돌리기 좋은 시점이다.

    e. viewDidDisappear

    • 뷰가 계층에서 사라진 뒤 수행합니다. 뷰를 숨기는 작업을 수행한다.
  3. 주의할 점

    • 메서드들을 직접 사용할 때는 부모 클래스의 메서드를 호출함을 밝히기 위해 override를 명시하는 것이 중요하다.


#2. Assignment



#3. 회고

  • 학습에 있어 뷰의 생애주기 확인을 하였다. 뷰가 어떤 과정에서 생성되고 사라지는 알았을 때, 이를 활용할 수 있는 방법이 있음을 알게 되었다. 단순하게 뷰를 표시하고 다음 화면을 보이는 것만 빠지는 것이 아니라, 이 과정에서 뷰의 표시유무가 메모리 할당에도 영향을 준다는 것을 알 수 있었음.
  • 적절한 메소드에 뷰를 할당해야 함을 배웠음.(표시의 위치, 어떤 데이터인지 구분등을 스스로 이해한 상태에서 효과적으로 쓸 수 있음)

0개의 댓글