안녕하세요. narvis2 입니다.
이번시간에는 iOS UIKit ViewController의 Lifecycle 에 대하여 알아보도록 하겠습니다.
🍀 ViewController Lifecycle

☘️ Init
ViewController의 초기화를 진행하면 내부의 객체들을 초기화하는 작업이 수행됨- ⚠️ 아직 내부의
View들이 생성된 것은 아니기에 내부View요소에는 접근할 수 없음
- ⚠️ 아직 내부의
init(coder:)👉 스토리보드를 기반으로ViewController를 만들 경우 사용init(nibName: bundle:):nib파일을 기반으로ViewController를 만들 경우 사용✅ 참고
nib👉NeXT Interface Builder (binary 기반), 인터페이스 빌더에서 생성한 객체들을 저장하는 파일,UI를 구성하는 객체들과 이들의 세부설정, 각 객체들간의 관계등을 포함합니다.
☘️ loadView
ViewController가 사용자가 설정한View를 자신의 최상위View로 설정하는 과정ViewController가 무엇을 기반으로 호출되었는가(Code,스토리보드,nib)와 관계없이 호출됨- 내부적으로
instantiateWithOwner()라는 메서드가 실행되면서 필요한subView들을nib으로부터unarchiving하고subView객체들이ViewController와 연결 되게 됩니다.- 이 때
subView객체들은 로드가 끝나자마자awakeFromNib()을 호출합니다. subView들은ViewController가 아니기 때문에 바로 내부 객체들에 접근할 수 있음.
- 이 때
subView들과 연결이 완료되면ViewController는viewDidLoad()를 호출 하여view들에 대한load가 완전히 종료되었음을 알림
☘️ viewDidLoad
- 필요한
View의 정보들이 모두 메모리에 위치되면 호춛됨 - 필요한 데이터를 갱신하는 코드를 작성
ViewController의 생애중 단 한번만 호출됨
☘️ viewWillAppear
ViewController의View가 화면에 나타나기 직전에 호출됨- 화면이 나타날때마다 호출 되므로 다른
View에서 돌아올 때 수행하고 싶은 행위 들에 대해 처리하기 좋음
☘️ viewDidAppear
ViewController의View가 모두 화면에 나타나면 호출됨- 주로
UI의Animation을 실행 시키거나 비디오 및 소리를 재생 시키거나data의update를 수행 APIdata를 받아와 화면을update하는 로직을 위치시키기에 적당
☘️ viewWillLayoutSubviews
view의bounds를 정하는 단계UIView의layoutSubviews()메서드가 트리거되기 직전에 호출- 가로모드 혹은 세로모드가 되면서
screen의 방향이 변화될 때도 호출 View의bounds에 대한 재계산이 필요할때마다 호출
☘️ viewDidLayoutSubviews
layoutSubviews()메서드 호출 후에 호출sub View들의size와position,constraint들이 적용이 완료된 상태- 가로모드 혹은 세로모드가 되면서
screen의 방향이 변화될 때도 호출 View의bounds에 대한 재계산이 필요할때마다 호출
☘️ viewWillDisappear
- 다른
ViewController로 화면이 전환되면서 원래ViewController가 사라질 때 호출 - 일반적으로 이 함수를
override해서 처리해야 할 작업은 거의 없음
☘️ viewDidDisappear
ViewController가 화면에 사라지고나면 호출ContainerViewController를 사용하다보면 여러ViewController가 메모리에 유지⚠️ 즉, 화면에서 사라진
ViewController도 여전히notification등의 이벤트를 받을 수 있다는 것notification,observing취소 및 디바이스 점검 등을 수행
☘️ deinit
ViewController객체가 메모리에 사라지기 전 호출- 주로 할당받은 자원중
ARC에 의해 해제가 되지 않는 자원을 해제하기 위해override - 화면에서 사라진다고 해당 메서드가 호출되는 것은 아님
☘️ didReceiveMemoryWarning
- 메모리가 부족해지면 호출
- 이를 관리해 필요없는 메모리를 해제 하는 작업을 할 수 있음
iOS가 강제로Application을 종료하는 것을 방지 하기 위해 필요