[iOS] View 상태 관련 메서드

코르피·2022년 9월 9일
0

View 상태 관련 메서드

명확한 이름은 아직 잘 모른다. 그래서 뷰 상태 관련 메서드 라고 일단 이름을 붙였다.
view 상태 관련 method는 뷰의 라이프 사이클과도 연관이 깊은 친구인데, 뷰 컨트롤러의 상태를 파악하는 메서드이다.
예전에는 ios의 사이클 관련 메서드라고 불렸다고 한다.
또, MVC에서 view와 model사이의 매니징을 해주는 역할을 한다.

종류

  • loadView
  • viewDidLoad
  • viewWillAppear
  • viewDidAppear
  • viewWillDisappear
  • viewDidDisappear

loadView

컨트롤러가 관리하는 뷰를 생성한다.

viewDidLoad

컨트롤러의 뷰가 메모리에 올라간 후 호출된다.

viewWillAppear

컨트롤러의 뷰가 뷰 계층에 곧 추가될 것을 알린다.

뷰가 계층에 추가되기 직전에 호출된다.

viewDidAppear

컨트롤러의 뷰가 뷰 계층에 추가되었다는 것을 알린다.

뷰가 계층에 추가된 직후에 호출된다.

viewWillDisappear

컨트롤러의 뷰가 뷰 계층으로부터 곧 제거될 것을 알린다.

뷰가 계층에서 삭제되기 직전에 호출된다.

view DidDisappear

컨트롤러의 뷰가 뷰 계층으로부터 제거되었다는 것을 알린다.
뷰가 계층에서 삭제된 직후에 호출된다.

View 관련 메서드가 필요한 이유 🤔

이 메서드는 왜 존재할까? 그냥 흐름대로 실행되면 뷰 컨트롤러가 켜질 텐데 필요한 이유는 개발자가 앱을 개발하면서 원하는 타이밍에 원하는 기능을 넣고 싶기 때문인 것 같다.

실행 예제

스크린샷 2022-09-09 02 22 43

viewController 두개와 각각 Present, Push 버튼을 만들었다.

Present 의 경우

스크린샷 2022-09-09 01 55 22
  1. VC1의 loadView로 뷰가 만들어 진다.
  2. VC1의 뷰가 메모리에 올라간다.
  3. VC1의 뷰가 뷰 계층에 추가되기 직전에 ViewWillAppear가 호출된다.
  4. VC1의 뷰가 뷰 계층에 추가된 직후에 ViewDidAppear가 호출된다.

Present 버튼을 눌렸을 경우 모달이 열린다. VC1과 마찬가지로 진행된다.

스크린샷 2022-09-09 01 55 44
  1. VC2의 loadView로 뷰가 만들어 진다.
  2. VC2의 뷰가 메모리에 올라간다. (ViewDidLoad)
  3. VC2의 뷰가 뷰 계층에 추가되기 직전에 ViewWillAppear가 호출된다.
  4. VC2의 뷰가 뷰 계층에 추가된 직후에 ViewDidAppear가 호출된다.
스크린샷 2022-09-09 01 55 56

모달을 아래로 내려서 뒤로 갔을 경우

  1. VC2의 뷰가 뷰 계층에서 사라지기 직전에 ViewWillDisappear가 호출된다.
  2. VC2의 뷰가 뷰 계층에서 사라진 직후에 ViewDidDisappear가 호출된다.

Push의 경우

스크린샷 2022-09-09 02 03 01

Push 버튼을 눌렀을 경우 네비게이션 방식으로 VC2가 열린다.

VC1이 ViewDidAppear가 호출되었을 때까지는 동일하고 아래부터 순서를 보자면

  1. VC2의 loadView로 뷰가 만들어 진다.
  2. VC2의 뷰가 메모리에 올라간다. (ViewDidLoad)
  3. VC1의 뷰가 뷰 계층에 사라지기 직전에 ViewWillDisappear가 호출된다.
  4. VC2의 뷰가 뷰 계층에 추가되기 직전에 ViewWillAppear가 호출된다.
  5. VC1의 뷰가 뷰 계층에 사라진 직후에 ViewDidDisappear가 호출된다.
  6. VC2의 뷰가 뷰 계층에 추가된 직후에 ViewDidAppear가 호출된다.
스크린샷 2022-09-09 02 03 12

뒤로 가는 버튼을 눌러서 VC1을 다시 불러온 경우

  1. VC2의 뷰가 뷰 계층에서 사라지기 직전에 ViewWillDisappear가 호출된다.
  2. VC1의 뷰가 뷰 계층에서 추가되기 직전에 ViewWillAppear가 호출된다.
  3. VC2의 뷰가 뷰 계층에 사라진 직후에 ViewDidDisappear가 호출된다.
  4. VC1의 뷰가 뷰 계층에 추가된 직후에 ViewDidAppear가 호출된다.

차이점 🌝

뷰가 바뀌는 지점에서 공통되는 부분을 보면
바뀌기 전의 뷰 컨트롤러를 1, 바뀐 후의 뷰 컨트롤러를 2라고 하면
1Will, 2Will, 1Did, 2Did 가 나온다
순서는 당연히 1은 Disappear, 2는 Appear

또 모달방식과 네비게이션 방식의 차이점은 모달방식에서는 메모리가 해제되지 않기 때문에 View 관련 메서드 들이 섞이지 않는데, 네비게이션 방식은 뒤의 메모리가 해제되기 때문에 View 관련 메서드들이 섞여서 나온다

profile
행복합시다!!

0개의 댓글