티스토리 뷰
안녕하세요. 도미닉입니다.
오늘은 뷰컨트롤러 라이프사이클에 대해서 알아보겠습니다.
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
- 뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤(뷰가 사라진 뒤)에 호출된다.
- 뷰가 사라지는 것과 관련된 추가 작업, 마무리 작업(리소스 해제 등)
ViewController Life Cycle 메서드 호출 순서
FirstViewController(이하 A 뷰컨트롤러)가 있고 “두번째 뷰컨트롤러로 이동” 버튼을 눌렀을 때 SecondViewController(이하 B 뷰컨트롤러) 로 이동하고 B 뷰컨트롤러의 “닫기” 버튼을 눌러 A 뷰컨트롤러로 이동할 때 ViewController Life Cycle 메서드 호출 순서를 살펴보자.
처음 앱을 실행했을 때 :
- A 뷰컨트롤러의 ViewDidLoad
- A 뷰컨트롤러의 ViewWillAppear
- A 뷰컨트롤러의 ViewDidAppear
두번째 뷰컨트롤러로 이동 버튼을 누른 후 :
- B 뷰컨트롤러의 ViewDidLoad
- A 뷰컨트롤러의 ViewWillDisappear
- B 뷰컨트롤러의 ViewWillAppear
- B 뷰컨트롤러의 ViewDidAppear
- A 뷰컨트롤러의 ViewDidDisappear
B 뷰컨트롤러에 닫기 버튼을 누른 후 :
- B 뷰컨트롤러의 ViewWillDisappear
- A 뷰컨트롤러의 ViewWillAppear
- A 뷰컨트롤러의 ViewDidAppear
- B 뷰컨트롤러의 ViewDidDisappear
NavigationController 가 있을 때 ViewController Life Cycle 메서드 호출 순서
NavigationController 에 RootViewController 가 있고 TableView 에 cell 을 눌러서 DetailViewController 로 이동하고 NavigationBar 의 “Root View Controller” 버튼을 눌러 RootViewController 로 이동할 때의 ViewController Life Cycle 메서드 호출 순서를 살펴보자.
처음 앱을 실행했을 때 :
- NavigationController 의 ViewDidLoad
- NavigationController 의 ViewWillAppear
- RootViewController 의 ViewDidLoad
- RootViewController 의 ViewWillAppear
- RootViewController 의 ViewDidAppear
- NavigationController 의 ViewDidAppear
RootViewController 에 셀을 눌렀을 때 :
- DetailViewController 의 ViewDidLoad
- RootViewController 의 ViewWillDisappear
- DetailViewController 의 ViewWillAppear
- RootViewController 의 ViewDidDisappear
- DetailViewController 의 ViewDidAppear
DetailViewController 의 뒤로가기 버튼을 눌렀을 때 :
- DetailViewController 의 ViewWillDisappear
- RootViewController 의 ViewWillAppear
- DetailViewController 의 ViewDidDisappear
- RootViewController 의 ViewDidAppear
네비게이션 컨트롤러가 있을 때는 네비게이션 컨트롤러가 없을 때와 다르게 사라질 뷰가 먼저 ViewDidDisappear 가 호출되고 그 뒤에 나타날 뷰의 ViewDidAppear 가 호출되었다.
이 부분은 조금 더 연구해봐야겠다.
정리
뷰컨트롤러 라이프 사이클에 대해서 알아봤습니다.
직접 예제를 돌려보면서 정리해보니 더 와닿고 도움이 된 포스팅이었습니다.
'IT > iOS' 카테고리의 다른 글
애플 Human Interface Guidelines iOS (2) User Interaction (0) | 2021.06.14 |
---|---|
애플 Human Interface Guidelines iOS (1) App Architecture (0) | 2021.06.09 |
iOS 에서 네이버 지도 띄우는 방법 (0) | 2021.06.05 |
UIView 모서리 둥글게 만드는 방법 (0) | 2021.05.31 |
iOS 테이블뷰(UITableView) 셀의 재사용 (0) | 2021.05.29 |
- Total
- Today
- Yesterday
- 영어
- 포인터
- exercise
- C
- 왕초보 영단어1
- 시원스쿨
- 뇌를 자극하는 C 프로그래밍
- 프로그램
- 매트랩
- 연습문제
- MySQL
- Swift
- 뇌를 자극하는 C프로그래밍
- 테라스캔
- 리눅스
- Apple
- Xcode
- 단어
- terascan
- 애플
- Matlab
- 함수
- 데이터베이스
- 스위프트
- 형용사
- 프로그래밍
- IOS
- database
- 반복문
- 배열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |