Search
Duplicate

(Swift) ViewController의 Lifecycle 이해하기

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Swift
Scrap
태그
9 more properties

Ⅰ. 설명

*아래 순서대로 운영체제가 실행시킴

1. viewDidLoad()

첫 번째 단계로, 뷰가 로드된 직후
뷰와 관련된 오브젝트들(IBOutlets, IBActions 등)에 접근 가능해짐
뷰가 만들어졌을 때 딱 한 번만 실행됨

2. viewWillAppear()

뷰가 화면에 나타나기 직전
유저는 아직 화면에서 아무것도 볼 수 없음
따라서 개발자는 이때 UI 컴포넌트(ex. Navigation bar)를 숨기거나 보이게 설정할 수 있음
여러번 실행될 수 있음

3. viewDidAppear()

뷰가 화면에 나타난 직후
유저가 화면을 보게됨
유저가 보았으면하는 효과(ex. 애니메이션, 카운트다운 타이머)를 넣으면 됨
여러번 실행될 수 있음

4. viewWillDisappear()

뷰가 화면에서 제거되기 직전
유저가 화면에서 back버튼을 누르는 등 현재 화면에서 나가려고 하는 액션이 있을 때 실행됨
더이상 필요하지 않은 효과를 제거(ex. 애니메이션 또는 타이머 멈추기)해야하는 시점
여러번 실행될 수 있음

5. viewDidDisappear()

뷰가 화면에서 제거된 직후
유저는 더이상 화면을 볼 수 없음
뷰가 휴대폰의 메모리에서 지워지거나 하는 것은 아님
여러번 실행될 수 있음

Ⅱ. 코드로 이해해보기

1. 먼저 그림과 같은 스토리보드를 만들고, 각 함수(위 1~5번) 호출 시 메시지를 print 합니다. (아래 코드 참고)

왼쪽(흰색)
이름 = ViewController1
Button = ViewController2로 넘어가는 버튼. Kind: show(push)
ViewController1.swift
오른쪽(노랑색)
이름 = ViewController2
Back = ViewController1로 dismiss하는 버튼. function 이름: goBack
ViewController2.swift

2. Simulator를 실행시켜 봅니다.

a. 첫화면

Output
VC1이 로드되어 화면에 나오게 되므로 VC1의 viewDidLoad, viewWillAppear, viewDidAppear가 차례로 호출

b. Button 눌렀을 때

Output
VC2가 로드되어 화면에 나오게 되므로 VC2의 viewDidLoad, viewWillAppear, viewDidAppear가 차례로 호출
VC1 위에 VC2가 얹어진 모양이므로 VC1에는 변화 없음

c. Back 눌렀을 때

Output
VC2가 화면에서 사라지기 때문에 VC2의 viewWillDisappear, viewDidDisappear가 차례로 호출

3. 스토리보드의 Button의 segue방식을 수정합니다.

Kind=push에서 Kind=Present Modally, Presentation=Full Screen 으로

4. Simulator를 다시 실행시켜 봅니다.

a. 첫화면

Output
이전과 같이 VC1의 viewDidLoad, viewWillAppear, viewDidAppear 순서로 호출

b. Button 눌렀을 때

Output
이전과 다르게 VC1이 호출되는 것을 볼 수 있음
VC2VC1을 완전히 덮어버렸기 때문에 VC1은 화면에서 아예 사라졌기 때문

c. Back 눌렀을 때

Output
Back을 눌렀을 때 VC1을 다시 화면에 띄움
Button을 눌러 VC2로 가면서 VC1을 화면에서 완전히 지워버렸기 때문