티스토리 뷰

IT/iOS

iOS ViewController Life Cycle

미닉길 2021. 6. 7. 10:13
반응형

안녕하세요. 도미닉입니다.

오늘은 뷰컨트롤러 라이프사이클에 대해서 알아보겠습니다.

ViewController Life Cycle 이란?

프로젝트를 처음 생성하거나 UIViewController 의 subclass 를 생성하면 아래와 같이 viewDidLoad() 가 있다.

이 viewDidLoad 와 같이 ViewController 의 상태 변화에 따라 호출되는 메서드들은 아래 사진과 같다.

ViewController 의 상태변화와 그에 따라 호출되는 메서드

이미지 출처 : https://developer.apple.com/documentation/uikit/uiviewcontroller

이 메서드에 대해 하나씩 알아보자.

ViewController Life Cycle 메서드 종류

viewDidLoad

  • 뷰 컨트롤러가 뷰 계층을 메모리에 로드한 뒤에 호출된다.
  • 메모리에 처음 로드될 때 한 번만 호출된다. (메모리 경고로 뷰가 사라질 경우 제외)
  • 뷰와 관련된 추가적인 초기화 작업

viewWillAppear

  • 뷰 컨트롤러의 뷰가 뷰 계층에 추가되기 전(뷰가 나타나기 전)에 호출된다.
  • 다른 뷰로 이동했다가 돌아오면 재호출된다.
  • 뷰와 관련된 추가적인 초기화 작업
  • viewDidLoad와 viewWillAppear의 차이?

viewDidLoad에서는 한 번 초기화된 후 변하지 않는 내용에 관한 작업을,

viewWillAppear에서는 화면이 나타날 때마다 업데이트 해야 하는 내용에 관한 작업을 수행

viewDidAppear

  • 뷰 컨트롤러의 뷰가 뷰 계층에 추가된 후(뷰가 나타난 뒤)에 호출된다.
  • 뷰를 나타낼 때 필요한 추가 작업, 애니메이션을 시작하는 작업

viewWillDisappear

  • 뷰 컨트롤러의 뷰가 뷰 계층에서 사라지기 전(뷰가 사라지기 전)에 호출된다.
  • 뷰가 생성된 뒤 작업한 내용을 되돌리는 작업, 최종 데이터 저장 작업

viewDidDisappear

  • 뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤(뷰가 사라진 뒤)에 호출된다.
  • 뷰가 사라지는 것과 관련된 추가 작업, 마무리 작업(리소스 해제 등)

출처 : https://yagom.net/groups/ios-%EA%B8%B0%EC%B4%88-%EC%8A%A4%ED%84%B0%EB%94%94-1367957547/forum/topic/viewcontroller-life-cycle/

ViewController Life Cycle 메서드 호출 순서

FirstViewController(이하 A 뷰컨트롤러)가 있고 “두번째 뷰컨트롤러로 이동” 버튼을 눌렀을 때 SecondViewController(이하 B 뷰컨트롤러) 로 이동하고 B 뷰컨트롤러의 “닫기” 버튼을 눌러 A 뷰컨트롤러로 이동할 때 ViewController Life Cycle 메서드 호출 순서를 살펴보자.

처음 앱을 실행했을 때 :

  1. A 뷰컨트롤러의 ViewDidLoad
  2. A 뷰컨트롤러의 ViewWillAppear
  3. A 뷰컨트롤러의 ViewDidAppear

두번째 뷰컨트롤러로 이동 버튼을 누른 후 :

  1. B 뷰컨트롤러의 ViewDidLoad
  2. A 뷰컨트롤러의 ViewWillDisappear
  3. B 뷰컨트롤러의 ViewWillAppear
  4. B 뷰컨트롤러의 ViewDidAppear
  5. A 뷰컨트롤러의 ViewDidDisappear

B 뷰컨트롤러에 닫기 버튼을 누른 후 :

  1. B 뷰컨트롤러의 ViewWillDisappear
  2. A 뷰컨트롤러의 ViewWillAppear
  3. A 뷰컨트롤러의 ViewDidAppear
  4. B 뷰컨트롤러의 ViewDidDisappear

NavigationController 가 있을 때 ViewController Life Cycle 메서드 호출 순서

NavigationController 에 RootViewController 가 있고 TableView 에 cell 을 눌러서 DetailViewController 로 이동하고 NavigationBar 의 “Root View Controller” 버튼을 눌러 RootViewController 로 이동할 때의 ViewController Life Cycle 메서드 호출 순서를 살펴보자.

처음 앱을 실행했을 때 :

  1. NavigationController 의 ViewDidLoad
  2. NavigationController 의 ViewWillAppear
  3. RootViewController 의 ViewDidLoad
  4. RootViewController 의 ViewWillAppear
  5. RootViewController 의 ViewDidAppear
  6. NavigationController 의 ViewDidAppear

RootViewController 에 셀을 눌렀을 때 :

  1. DetailViewController 의 ViewDidLoad
  2. RootViewController 의 ViewWillDisappear
  3. DetailViewController 의 ViewWillAppear
  4. RootViewController 의 ViewDidDisappear
  5. DetailViewController 의 ViewDidAppear

DetailViewController 의 뒤로가기 버튼을 눌렀을 때 :

  1. DetailViewController 의 ViewWillDisappear
  2. RootViewController 의 ViewWillAppear
  3. DetailViewController 의 ViewDidDisappear
  4. RootViewController 의 ViewDidAppear

네비게이션 컨트롤러가 있을 때는 네비게이션 컨트롤러가 없을 때와 다르게 사라질 뷰가 먼저 ViewDidDisappear 가 호출되고 그 뒤에 나타날 뷰의 ViewDidAppear 가 호출되었다.

이 부분은 조금 더 연구해봐야겠다.

정리

뷰컨트롤러 라이프 사이클에 대해서 알아봤습니다.

직접 예제를 돌려보면서 정리해보니 더 와닿고 도움이 된 포스팅이었습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함