iOS/iOS 지식

[iOS] ViewController 생명주기

홍복치 2024. 5. 26. 21:15

view가 화면에 나타날 준비를 하는 과정

1. view의 init(coder:) 메서드를 사용하여 각 뷰를 생성
2. action 및 outlet 연결

3. 각각의 view와 viewcontroller의 awakFromNib() 메서드 호출

4. view계층을 viewcontroller의 view객체에 할당
5. viewDidLoad() 호출

로드 타임에 viewController를 사용할 수 있게 하는데 필요한 설정단계를 한 번만 수행

위의 단계에서 화면에 나타날 때마다 수행되어야 하는 작업은 하면 안됨(애니메이션, 뷰 업데이트 등)

화면이 뜰 때 단계별로 함수를 print해보면 위와 같이 출력 되는 것을 볼 수 있음

 

UIKit은 view가 화면에 표시되면 viewcontroller에게 알려주고 view의 의 레이아웃을 현재 환경에 맞게 업데이트함

 

1. 전환을 시작할 때 viewWillAppear(_ :) 호출 

   view를 view 계층에 추가, trait collections(view의 사이즈나 display 비율, layout 방향 등)를 갱신

   superview의 사이즈와 위치를 포함하여 뷰의 geomery 갱신(superview에 의해 배치)

2. layout margins와 safe area를 갱신 및 필요에 따라

   viewLayoutMarginDidChange() 와viewSafeAreaInsetsDidChange()를 호출 

3. viewIsAppearing(_:)를 호출하여 뷰 컨트롤러의 뷰가 화면에 표시되고 있음을 알림

-------------view의 bound 변경 및 재배치 (4, 5, 6 사이 오토레이아웃 동작) --------------------------------
4. viewWillLayoutSubview() 호출

5. view 계층의 레이아웃을 갱신

6. viewDidLayoutSubviews 호출

------------------------------------------------------------------------------------------------------------------------

7. 화면에 view들을 표시

8. 애니메이션이 완료된 후 viewDidAppear 호출

 

viewController 관련 메서드

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. viewDidLoad

viewcontroller의 view가 메모리에 로드된 후 호출

nib 파일에서 로드되었든 loadView() 메서드에서 프로그래밍 방식으로 생성되었는지에 관계없이 호출

주로 초기화 함수를 작성

 

2. viewWillAppear

view가 superview에 배치되고 traits가 갱신됨

view의 표시와 관련된 작업을 수행할 수 있음(뷰의 방향 또는 스타일 / 상태표시줄 방향 또는 스타일) 등

viewDidLoad와 달리 화면이 보여질 때 여러번 호출되며 viewDidAppear와 한쌍으로 동작

pop over된 경우 다시 원래 화면으로 돌아왔을 때 다시 불리지 않음

modal이 disappear되어도 main화면에서 viewWillAppear가 호출되지 않음

 

3. viewIsAppearing(WWDC23에서 소개. iOS13부터 적용)

 

view가 보일때 UI를 업데이트 하기 위한 최적의 장소

 

view의 계층구조, geometry 등이 필요한 작업일 때는 이곳에서 작업

그 외 애니메이션과 함께 추가할 수 있는 transition coordinator 사용, notification center 등록 등은 viewWillAppear

 

viewWillAppear는 view가 계층구조에 추가되고 trait이 갱신되는 곳

 -> 이곳에서 UI를 갱신하면 문제가 생길 가능성이 있음

viewDidAppear는 화면에 보여지는 transition animation이후에 호출되기 됨

->  UI가 업데이트 되는 것이 늦는 것처럼 보일 수 있음

 

4. viewDidAppear

화면이 나타난 직후에 호출되며 view와 관련된 추가작업(애니메이션) 등이 이루어짐

5. viewWillDisappear

편집중 변경사항 커밋 또는 viewDidAppear에서 했던 것들(상태표시줄 방향, 스타일 등)을 되돌려 줌

 

6. viewDidDisappear

뷰가 사라지거나 숨겨지는 것 관련한 작업을 진행

notificationCenter 해제 등

 
* 참고