iOS 기초

ViewController LifeCycle

motosw3600 2021. 12. 7. 16:07
 

 

loadView()

뷰를 실제로 생성하여 메모리에 로드

스토리보드나 nib(xib)를 사용하지 않는다면 이 메소드를 오버라이드해서 뷰를 만들고 계층을 구성해야된다.

 

viewDidLoad()

화면을 나오기 위해 여러 프로세싱 처리가 준비가 된 상태

ViewController가 메모리에 로드되고 난 후에 호출됨

뷰의 로딩이 완료되었을 때 시스템에 의해 자동으로 호출됨

한번씩만 호출된다.

viewWillApear()

뷰가 계층 구조에 추가되기 직전(화면이 나오기 바로 전인 상태)

또는 해당 뷰가 나타나기위한 애니매이션이 설정되기전 호출

뷰가 화면에 나타나기전 추가작업 수행 가능

view의 레이아웃을 계산하는 시점이 viewDidLoad와 viewWillAppear사이

화면이 다시 나올때도 계속 호출된다.

viewWillLayoutSubViews()

view가 서브뷰의 레이아웃을 배치하기 직전에 호출되는 메서드

view의 bounds가 최종적으로 결정되는 최초 시점

​viewWillAppear와 viewDidAppear사이에 호출된다.

ex) view의 bounds가 변경될때(화면이 회전될 때)

 

viewDidLayoutSubViews()

view가 서브뷰의 레이아웃을 배치한 후에 호출되는 메서드

서브뷰가 변경된 후 변경할 점이 있다면 이시점에 수정할 때 적합

​viewWillAppear와 viewDidAppear사이에 호출된다.

 

viewDidAppear()

뷰가 나타났다는 것을 컨트롤러에게 알리는 역할

뷰가 화면에 나타난 직후에 실행된다.

viewWillDisappear()

뷰가 사라지기 직전에 호출되는 함수

해당 뷰를 통해 일어난 변화를 저장하거나, First Responder상태를 내려놓거나,

뷰가 나타났을때 변경됬던 뷰들을 다시 원래대로 돌려놓는 작업 수행 가능

뷰가 삭제되려고하고있는 것을 뷰 컨트롤러에 통지

viewDidDisappear()

viewWillDisappear가 호출되면 뷰컨트롤러가 뷰가 제거되었음을 알림

 

deinit()

최종적으로 이 컨트롤러가 메모리 해제됬을때 호출되는 것

해당 ViewController의 참조가 0이 되면 호출

화면을 나갔는데 deinit이 호출이 안됬다면 어딘가 컨트롤러가 묶여있다는것

 


LifeCycle Test

Navigation Controller로 빨간색(View)와 초록색(SecondView)로 구성

 

1. 어플리케이션 가동 후 출력 메세지

 

 

2. 버튼으로 SecondView이동 후 출력 메세지

 

 

 

3. 다시 첫번째 View로 이동한 후 출력 메세지

 

 

(전체 출력 메세지)

 

'iOS 기초' 카테고리의 다른 글

iOS 화면전환  (0) 2021.12.10
AppDelegate, SceneDelegate  (0) 2021.12.10
init(frame:), required init?(coder: NSCoder), awakeFromNIb()  (0) 2021.12.07
Nib, Xib  (0) 2021.12.07
App LifeCycle  (0) 2021.12.07