메서드의 호출 위치를 변경함에 따라 화면에서의 차이점을 한 번 확인해 봅시다.
### viewWillAppear일때
- pop화면(두번째 뷰컨)에서 push(첫번째 뷰컨)으로 돌아올 때 이미 색이 바뀌어져있는걸 관찰
### viewDidAppear일때
- 앱실행할때 실행
- push화면이 다만들어지고나서 색이바뀌는걸 관찰 (1초 버퍼링있는느낌)
### viewWillDisappear일때
- push를 눌렀을때 첫번째뷰컨 화면에서 빠져나가면서 색이바뀌는걸 관찰
### viewDidDisappear일때
- push를 눌렀을때 첫번째 뷰컨화면에서 빠져나가고 색이바뀌는걸 관찰 (화면이동간에 색바뀌는걸 관찰할 수 없음. 이미 화면이 다 전환되고 실행)
### viewDidLoad일때
- firstVC(루트뷰,메인뷰)에서는 viewDidLoad가 메모리를 불러올때 한번 실행되고 이후에 실행되지않아 색이 바뀌지 않음
- secondVC는 실행될 때마다 viewDidLoad가 실행되서 색이 변함
## 아래의 코드는 UIViewController의 view 관련 메서드(viewDidLoad, viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear) 중 어느 메서드 내부에 위치하는 것이 좋을지 생각해봅시다. (50분)
### 사용자 환영 애니메이션을 보여주는 코드
- 사용자 환영 애니메이션같은 인트로화면의 경우 앱을 실행하는 타이밍 -viewDidLoad 쪽에서 한번 불러오고 이후에 실행될 이유가 없어보임 (viewDidAppear에 실행시킬 경우 화면 전환 시 계속 애니메이션이 나옴)
### 뷰에 보여질 데이터를 불러올 코드
- viewWillAppear : DidLoad에 넣었을 시 데이터를 다시 그려지지 않지만 viewWillapper에서 호출 시 데이터를 Controller가 push 할 때마다 view에 데이터를 업데이트 해줄 수 있다.
- viewDidLoad : FirstVC에서 SecondVC로 화면전환될 때 ViewDidLoad가 계속 실행되므로, viewDidLoad를 사용해도 괜찮을거 같다.
### 배경음악을 재생할 코드
- goat
- viewDidLoad : 앱 전체에 실행되는 배경음악의 경우 메모리가 처음에 load되는 시점 (viewDidLoad)쪽에와야 적절하다고 생각합니다. 화면전환이 될때마다 배경음악메서드가 새로불러와지면 배경음악이 뷰마다 바뀌게되서 부적절하다고 생각합니다. 그치만 앱을 종료하지않는 이상 viewDidLoad에 불러온 메모리를 종료할 방법이없기때문에 이것도 문제일거같습니다
- viewWillAppear : 화면마다의 컨셉에따른 배경음악이라면 view가 생기는 타이밍인 viewWillAppear가 적절하다고 생각하빈다
- 송준
- viewWillAppear : FirstVC viewWillAppear에 배경음악을 설정하면, SecondVC화면으로 화면 전환 이후 다시 돌아오게 되었을 때 다시 노래가 나올 수 있기 때문이다.
- Andrew
- viewDidAppear: Controller가 load하고 바로 음악이 재생되는것보다 화면이 다 보여지고 나서 어느정도 텀을두고 음악이 재생되는게 더 자연스럽다고 생각했습니다.
### 배경음악을 중지할 코드
- viewDidDisappear가 적절해보입니다. 다음 화면으로 넘어갈 때, 음악이 뚝 끊기는거보다 1초정도 더 재생되고 꺼지는게 사용자 입장에서 좋을거 같습니다.
- viewWillDisappear 예를 들어 유튜브에서도 음악을 듣다가 뒤로가기를 할 때 음악이 먼저 취소되고 나서 화면이 바뀌는것으로 보아 음악이 먼저 취소되는게 적합하다고 생각했습니다.
### 노티피케이션 수신을 위한 옵저버 등록 코드
- viewDidLoad가 적절해보입니다.
### 노티피케이션 수신 중단을 위한 구독 중단 코드
- viewDidDisappear가 적절해보입니다.
### 스토리보드로 구성한 뷰 요소의 초기값을 설정하는 코드
- viewDidLoad : 스토리보드를 사용하면 스토리보드에 있는 뷰를 가져오기 때문에 MainView를 생성하려고 사용하는 loadView를 사용하는것 보다 viewDidLoad에 생성되는게 적합하다고 생각합니다