View Life Cycle
앱에도 생명주기가 있듯이 뷰에도 생명주기가 있더라구요??
마찬가지로 뷰에 관련해서 생명주기관련 이벤트가 발생시 해당 이벤트와 관련된 메서드가 호출됩니다.
즉, 뷰의 상태 전환시 마다 수행할 동작을 코드로 작성해 줄 것이 있는거죠!
각각의 메서드들은 아래의 순간에 호출돼요
•
viewDidLoad : 뷰가 로드 되는 순간
•
viewWillAppear : 뷰가 표시되기 직전
•
viewDidAppear : 뷰가 표시된 직후
•
viewWillDisappear : 뷰가 사라지기 직전
•
viewDidDisappear : 뷰가 사라진 직후
각각의 메서드에 대해서도 한번 알아봅시다.
1. viewDidLoad
뷰의 컨트롤러가 메모리에 로드되고 난 후에 호출됩니다.
뷰의 로딩이 완료 되었을 때 시스템에 의해 자동으로 호출되기 때문에
1.
리소스를 초기화
2.
초기화면 구성
하는등의 용도로 주로 사용됩니다.
여기서 주의할 것은
화면이 처음 만들어질 때 한번만 실행된다는 점이에요.
딱 한 번만 실행해야하는 초기화 코드가 있을 경우 이 메서드 내부에 작성하면 됩니다.
2. viewWillAppear
뷰가 눈 앞에 나타나기 직전에 호출됩니다.
엥 그럼 viewDidLoad 랑 똑같은거 아닌가?
viewDidLoad 는 화면 구성시 딱 한버만 실행되는 반면,
viewWillAppear 는 화면이 눈 앞에 다시 나타날 때마다 실행됩니다.
다른 뷰로 갔다가 다시 돌아오는 상황에서 해주고 싶은 동작 코드들을 이 메서드 내부에 작성하면 됩니다.
3. viewDidAppear
뷰가 눈 앞에 나타난 직후에 실행됩니다.
주로 화면에 적용될 애니메이션에 관련된 코드들을 이 메서드 내부에 작성하면 됩니다.
4. viewWillDisappear
뷰가 눈앞에서 사라지기 직전에 호출되는 함수입니다.
뷰가 삭제되려고 하고 있는 것을 뷰 컨트롤러에 notice 합니다.
5. viewDidDisappear
뷰가 눈앞에서 사라진 직후에 호출되는 함수입니다.
Navigation controller 예제
앱실행시
두번째 뷰로 이동시 호출되는 메서드 목록입니다.
재밌는점은
첫번째 뷰가 사라지기 전에
두번째 뷰의 WillAppear 메서드가 호출되는 것이네요.
첫번째 뷰의
•
viewWillDisappear
•
viewDidDisappear
는 연달아 실행될 것으로 생각할 수도 있지만 항상 그런건 아니네요
심지어 두번째 뷰가 메모리에 로드 된 후에서야 첫번째 뷰의 disappear 가 시작되는 모습을 볼 수 있습니다.
다시 돌아왔을 떄는
첫번째 뷰의 viewDidLoad 는 실행되지 않는 것을 볼 수 있습니다.
처음 생성될 때 딱 한번만 실행되는 것 같아요
앱스위쳐를 동작시켰을 때 View 관련해서는 어떠한 View lifecycle 이벤트도 발생하지 않았습니다.
아무래도 정말 View 와 관련되어야 하나봐요
여기는 AppLifecycle 을 활요해주어야 할 것 같습니다.
ModalView 예제
처음 앱을 실행하고 나서 첫번째 뷰 컨트롤러의
•
viewDidLoad
•
viewWillAppear
•
viewDidAppear
이 실행되는 모습을 볼 수 있습니다.
이게 재밌네요
ModalView 로 띄우니까 첫번째 ViewController 는 Disappear 되지 않는 거 보이시나요?
몰랐던 내용인데 ModalView 를 이용하면 아래에 있는 View 들은 disappear 처리되지 않는 것 같아요!
알아두면 유용할 것 같습니다 ㅎㅎ
다시 첫번째 뷰로 돌아갔을 때에는 2번째 view Controller 가 disappear 되었습니다.