zeddios.tistory.com/43의 글을 참고하여 쓴 글입니다.
NavigationBar를 공부하다가 궁금해서 작성하는 글이다.
코드를 작성하면서 ViewWillAppear은 어째서 다른 뷰컨에 있는 데이터를 가져올 수 있는것일까?, Delegate 패턴으로 가지고 오는 것이랑 다른 것일까? 라는 생각이 들었다.
앱들은 viewController로 이루어져 있는데, 화면이 하나로 되어있는 앱도 있지만, 보통 하나 이상의 화면으로 되어있다.
이 각각의 VC는 생명주기를 가지고 있다. VC의 생명주기는 "보여졌다" -> "사라졌다"
뷰의 생명주기는 이러하다고 한다.
1. ViewDidLoad
뷰의 로딩이 완료되었을때, 시스템에 의해 자동으로 호출된다.
일반적으로 리소스를 초기화하거나 초기화면을 구성하는 용도로 주로 사용한다. 화면이 처음 만들어질 때, 한 번만 실행되므로, 처음 한 번만 실행해야하는 초기화 코드가 있을 경우, 이 메소드에 작성한다.
viewDidLoad에서 UIImage의 배열에 이미지를 넣고, 처음보이는 이미지에 ImageArray의 첫번째 이미지를 보여주게 만드는 것이다.
2. ViewWillAppear
ViewWillAppear은 뷰가 이제 나타날 것이라는 신호를 컨트롤러에게 알리는 역할이다. 뷰가 나타나기 직전에 호출된다는뜻이다. 하지만 이것은 ViewDidLoad와는 다르다
첫 화면에서는 처음에 viewDidLoad가 호출되고 그다음에 viewWillAppear가 호출된다. 뷰가 로딩이 완료되었고, 뷰가 이제 나타날 것이라는 신호를 컨트롤러에 알려주는 것이다.
navigation Bar를 사용해 2번째 뷰로 간다면 2번째의 뷰의 viewDidLoad와 viewWillAppear가 순서대로 불린다. 2번쨰 뷰가 로드가 되었고, 이제 나타난다는 신호를 컨트롤러에 알려주는 것이다.
하지만 여기서 첫번쨰뷰로 가게되면??
viewDidLoad 함수는 호출되지않고, viewWillAppear만 호출된다.
따라서 앱 초기화 작업은 viewDidLoad에서 해도 되지만, 다른뷰에서 갔다가 다시 돌아오는 상황에서는 viewWillAppear에서 해준다.
Todo list를 만들면서 만든함수이다. AddViewController라는 뷰컨에서 루트 뷰컨의 정보를 변경하고, pop하면 viewWillAppear 함수에서 tableview의 정보를 변경하고 뷰가 나타난다.
3. viewDidAppear
viewDidAppear은 뷰가 나타났다는 것을 컨트롤러에게 알리는 역할, 화면에 적용될 애니메이션을 그려준다.
viewDidAppear은 뷰가 화면에 나타난 직후에 실행된다!!
(나중에 viewDidAppear을 사용하게 되면 코드를 한번 올려보도록 하겠습니다)
4. viewWillDisappear
뷰가 사라지기 직전에 호출되는 함수이다. 뷰가 삭제되려고하고 있는 것을 뷰 컨에 통지한다.
5. viewDidDisappear
viewDidDisappear이 호출되면 뷰컨의 뷰가 제거되었음을 알려준다.
6. loadView
뷰컨의 생애 중기 중 가장 먼저있는 것이다. 컨트롤러가 관라하는 뷰를 만드는 역할을 한다. loadView가 뷰를 만들고, 메모리에 올린 뒤에, viewDidLoad가 호출된다는 것이다.
주의할점:
1. 뷰가 2개 이상일 경우 viewWillAppear 다음에 ViewDidAppear가 발생하는 것은 아니다. viewWillAppear가 발생하고, 전에 있던 뷰의 viewDidDisappear가 발생하고, viewDidAppear가 호출될 수 있다
2. 첫번째 뷰가 네비게이션 컨트롤러의 rootView라면 viewDidLoad는 한번만 호출된다.
[iOS] 음악재생, 녹음하는 앱(1) (0) | 2021.02.10 |
---|---|
[Swift] View의 생애주기2 (0) | 2021.02.08 |
[Swift] Delegate로 정보 전달하기 (0) | 2021.02.05 |
[Swift] 함수 (0) | 2021.01.31 |
[Swift] 컬렉션 타입 - Array, Dictionary, Set (0) | 2021.01.31 |
댓글 영역