티스토리 뷰
안녕하세요 Pingu입니다~🐧
오늘은 iOS 앱개발에서 아주아주 중요한 ViewController의 Life cycle에 대해 알아보려고 합니다.
제일 처음 iOS 공부를 시작할 때 공부한 내용인데, 정리는 이제야 해서 올리네요ㅠ
iOS 앱개발에서 아주 중요한 내용이니 잘 정리해보도록 하겠습니다.
애플 문서에 나온 사진을 하나 첨부해서 설명하도록 할게요.
위와 같이 애플에서는 뷰 컨트롤러의 생명 주기를 그림으로 설명해주는데, 이를 좀 더 직관적으로 제가 그려봤습니다.
ViewDidLoad
이건 뷰 컨트롤러를 만들 때 한 번만 호출합니다.
ViewWillAppear
만들어진 뷰 컨트롤러가 뷰 계층 구조에 추가되기 직전에 호출됩니다.
즉 이름 그대로 뷰가 곧 보일 때 호출되는 메서드입니다!
ViewDidAppear
만들어진 뷰 컨트롤러가 뷰 계층 구조에 추가된 직후에 호출됩니다.
이름 그대로 뷰가 보여진 뒤 호출되는 메서드입니다.
ViewWillDisappear
뷰 컨트롤러가 뷰 계층 구조에서 사라지기 직전에 호출됩니다.
뷰가 사라지기 직전에 호출되는 메서드입니다.
ViewDidDisappear
뷰 컨트롤러가 뷰 계층 구조에서 사라진 직후 호출됩니다.
뷰가 사라진 직후에 호출되는 메서드입니다.
사실 이렇게만 보면 잘 이해가 안 되는데, 실제로 프로젝트를 하나 만들어서 각각의 메서드의 호출 지점을 파악해보면 이해가 정말 빠르게 됩니다!
간단하게 흰색뷰가 먼저 나오고 버튼을 누르면 파랑 뷰가 fullscreen modal로 나오는 앱을 만들었습니다.
이러한 앱을 실행을 시키면...
위와 같이 흰색 뷰가 나오기까지 ViewDidLoad, ViewWillAppear, ViewDidAppear이 호출된 것을 볼 수 있습니다.
이 상태에서 만약 파랑 뷰 띄우기 버튼을 누르게 되면 어떻게 될까요?
위와 같이 흰색뷰는 ViewWillDisappear, ViewDidDisappear이 호출되고 파랑 뷰는 ViewDidLoad, ViewWillAppear, ViewDidDisappear이 호출되는 것을 볼 수 있어요.
그럼 이번에는 파란 뷰 없애기 버튼을 눌러볼게요.
파랑뷰는 ViewWillDisappear, ViewDidAppear이 호출되고 흰색 뷰는 ViewWillAppear, ViewDidAppear이 호출됩니다.
이제 홈버튼으로 가볼게요!
위와 같이 백그라운드로 갈 때 발생하는 메서드만 호출되고 View Controller에 관련된 메서드들은 호출되지 않는 것을 볼 수 있습니다.
백그라운드로 갈 때 호출되는 메서드는 View Controller life cycle과 관련된 메서드가 아니고 App Life Cycle과 관련된 메서드인데 이해를 위해 로그를 남겼습니다. App Life Cycle도 정말 중요한 내용이고 이에 대한 정보는 여기를 참고해주세요!
어쨌든 다시 앱을 실행하면 어떻게 될까요?
이번에도 View Controller 관련 메서드는 호출되지 않고 Foreground로 진입 시 호출되는 메서드만 호출되었습니다.
즉 앱을 종료하는 것이 아닌 background, foreground의 전환에는 View Controller 관련 메서드가 호출되지 않는다는 것을 알 수 있어요!
그럼 마지막으로 앱을 종료 할 때 어떻게 되는지 보겠습니다.
이렇게 아예 종료를 해줘야 ViewWillDisappear, ViewDidDisappear가 호출되는 것을 볼 수 있습니다.
이렇게 View Controller Life Cycle을 실제 앱으로 다뤄 보니 쉽게 이해할 수 있었던 거 같아요.
감사합니다!
참고한 문서
developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
'iOS > iOS_Memo' 카테고리의 다른 글
[iOS 앱개발] Swift와 Vapor로 서버 만들기 (0) | 2021.02.11 |
---|---|
[iOS 앱개발] Application의 Life Cycle 알아보기 (0) | 2021.02.05 |
[iOS 앱개발] MPNowPlayingInfoPropertyElapsedPlaybackTime 오류 해결 방법 (0) | 2021.02.02 |
[iOS 앱개발] CALayer 알아보기 1 (0) | 2021.01.28 |
[iOS 앱개발] Foreground, Background 알아보기 (0) | 2021.01.24 |
- Total
- Today
- Yesterday
- 코딩테스트
- DP
- 코테
- 테이블뷰
- Combine
- 앱개발
- BFS
- 알고리즘
- 백준
- pattern
- 동시성
- Swift
- document
- Xcode
- Publisher
- operating
- 프로그래밍
- 아이폰
- OS
- dfs
- 문법
- OSTEP
- Apple
- 자료구조
- design
- mac
- IOS
- 스위프트
- System
- operator
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |