大器晩成
View Controller 생명주기(상태변화) 본문
View Contorller의 생명주기
앱들은 View Controller로 이루어져 있으며, 두 개 이상의 화면을 가지고 있는 앱에서는 각각의 뷰컨트롤러 들은 생명주기를 가지고 있습니다.
뷰컨트롤러의 생명주기는 나타남 -> 사라짐의 주기를 가지고 있습니다.
화면에 보여지는 뷰가 바뀌면, 뷰컨트롤러는 자동으로 특정한 메서드를 호출해서 변화에 다른 클래스들이 반응할 수 있도록 합니다.
viewWillAppear 같은 메서드를 사용해 뷰에 보여줄 컨텐츠를 미리 로드하여 준비하고, viewWillDisapper 같은 메서드를 활용하여 삭제될 중요한 정보들을 미리 따로 저장해 둘 수 있습니다.
- viewDidLoad - 뷰 계층을 메모리에 로드한 직후에 수행하며, 주로 뷰의 초기화 작업을 담당합니다.
viewDidLoad는 메모리에 처음 로드될 때 한 번 호출됩니다. - viewWillAppear - 뷰가 계층에 추가되고, 화면에 표시되기 직전에 수행합니다.
- viewIsAppearing - viewWillAppar과 달리 뷰컨트롤러의 뷰를 뷰 계층에 추가가 할 때 호출됩니다.
- viewDidAppear - 뷰가 화면에 표시된 이후에 수행합니다.
- viewWillDisappear - 뷰가 계층에서 사라지기 직전에 수행합니다.
- viewDidDisapplear - 뷰가 계층에서 사라진 뒤 수행합니다.
네비게이션 컨트롤러를 활용한 뷰 컨트롤러 생명주기 확인해보기 (Show)
1. 처음 시뮬레이터를 동작하면 다음과 같은 동작을 합니다.
-> viewDidLoad - > viewWillAppear -> viewIsAppearing -> viewDidAppear
2. 다른 화면으로 이동시에는 다음과 같이 동작합니다.
-> (SecondView) viewDidLoad -> (FirstView) viewWillDisappear -> (SecondView) viewWillAppear ->
(SecondView) viewIsAppearing -> (FirstView) viewDidDisappear -> (SecondView) View DidAppear
3. 원래 화면으로 전환
-> (SecondView) viewWillDisappear ->(FirstView) viewWillAppear -> (FirstView)viewIsAppearing ->
(SecondView) viewDidDisappear -> (FirstView) ViewDidAppear
* viewDidLoad는 한 번만 실행되기 때문에 다시 처음화면으로 되돌아갈 경우 호출되지 않습니다.
4. 다시 두번째 화면으로 전환
-> 2번과 같은 동작을 하지만, 마찬가지로 viewDidLoad는 동작하지 않습니다.
탭바를 활용한 뷰 컨트롤러 생명주기 확인해보기
1. 처음 시뮬레이터를 동작하면 다음과 같은 동작을 합니다.
-> viewDidLoad - > viewWillAppear -> viewIsAppearing -> viewDidAppear
2. 다른 화면으로 이동시에는 다음과 같이 동작합니다.
-> (TabView) viewDidLoad -> (TabView) viewWillAppear -> (FirstView) viewWillDisappear
-> (TabView)viewIsAppearing -> -> (TabView) ViewDidAppear -> (FirstView) viewDidDisappear
3. 원래 화면으로 전환
-> (FirstView) viewWillAppear ->(TabView) viewWillDisappear -> (FirstView) viewIsAppearing ->
(FirstView) viewDidAppear -> (TabView) viewDidDisappear
* viewDidLoad는 한 번만 실행되기 때문에 다시 처음화면으로 되돌아갈 경우 호출되지 않습니다.
4. 다시 두번째 화면으로 전환
-> 2번과 같은 동작을 하지만, 마찬가지로 viewDidLoad는 동작하지 않습니다.
Modal 방식의 활용한 뷰 컨트롤러 생명주기 확인해보기
Page VS FullScreen
1. Page로 화면 이동시에는 다음과 같이 동작합니다.
-> (PageView) viewDidLoad -> (PageView) viewWillAppear -> (PageView)viewIsAppearing -> (PageView) viewDidDisappear
3. 원래 화면으로 전환
(PageView) viewWillDisappear -> (PageView) viewDidDisappear
4. 다시 두번째 화면으로 전환
-> 1번과 같은 동작을 합니다.
1. FullScreen으로 화면 이동시에는 다음과 같이 동작합니다.
-> (FullScreen View) viewDidLoad -> (First View) viewWillDisappear -> (FullScreen View)) viewWillAppear
->(FullScreen View) viewIsAppearing -> -> (FullScreen View) viewDidAppear -> (FirstView) viewDidDisappear
2. 원래 화면으로 전환
-> (FullScreen View) viewWillDisappear ->(FirstView) viewWillAppear -> (FirstView)viewIsAppearing
-> (FirstView) ViewDidAppear -> (FullScreen View) viewDidDisappear
4. 다시 두번째 화면으로 전환
-> 1번과 같은 동작을 합니다.
Modal 방식의 페이지 방식과 풀스크린 방식은 일부 차이가 발생합니다.
- Modal방식은 네비게이션컨트롤러랑 다르게 이동할 때마다 viewDidLoad가 발생합니다. 이는 다시 원래화면으로 돌아갈 때 해당 뷰는 메모리에서 삭제된다는 것을 의미합니다.
- Page방식의 경우 아래 화면이 아직 남아있는 상태이기 때문에, disappear과 관련된 메서드는 호출되지 않습니다.
- FullScreen 방식은 네비게이션컨트롤랑 비슷하게 동작합니다. 이는 풀스크린의 경우 아래 화면이 남아있는게 아니라 사라지기 때문입니다.
- FullScreen 방식과 네비게이션 방식에서 DidAppear과 DidDisappear의 호출 순서가 조금 차이가 나는데 이는,풀 스크린 방식에는 뷰가 메모리에서 삭제되기 때문에 ViewDidAppear를 먼저 호출하는 것이고, 네비게이션컨트롤러는 view가 메모리에서 삭제하는 방식이 아니기 때문에 viewDiddisappear가 먼저 호출되는 것으로 보입니다(뇌피셜)
'iOS > UiKit' 카테고리의 다른 글
UIStackView (0) | 2025.01.05 |
---|---|
Table View Controller - 2탄 (실전편) (0) | 2025.01.05 |
TableViewController - Dynamic , Static (0) | 2025.01.05 |
Auto Layout (0) | 2025.01.02 |
AppDelegate, Scene Delegate (1) | 2024.12.30 |