[Tistory] [iOS] ViewController 생명주기

원글 페이지 : 바로가기

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 해제 등 * 참고 https://developer.apple.com/documentation/uikit/view_controllers/displaying_and_managing_views_with_a_view_controller https://velog.io/@kimscastle/iOS-%EC%83%88%EB%A1%9C%EC%83%9D%EA%B8%B4-viewIsAppearing-%EA%B7%B8%EB%9E%98%EC%84%9C-%EC%96%B8%EC%A0%9C%EC%93%B0%EB%8A%94%EA%B1%B4%EB%8D%B0

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다