Life cycle
1. **Managing your app’s life cycle**
application의 4가지 모드
- 앱 실행
- Application은 Active 상태가 됨.
- Active는 InActive에 감싸져 있어 Active로 들어가거나 나갈 때에는 InActive 상태를 거쳐야 함.
- Foreground / Background
- Foreground : 앱이 화면을 점유
- Background : 앱이 화면을 점유하고 있지 않음.
- 공통점 : 앱이 메모리에 올라가 있다.
- 사용자가 full control이 불가하다면 InActive 상태
- 전화가 와서 사용자가 control 할 수 없는 상황 !
- Background
- InActive → Background_Suspend
- InActive상태에서 전화를 받으면 다른 앱들은 Background 모드의 Suspend상태가 된다. 언제 나를 다시 불러줄지 아무것도 안하고 기다리는 상태.
- InActive → Background_Running
- 전화를 받고 있으면서 메일이 보내질 때. 업로드/타이머 관련 일 등.
- 따라서 Application에서 Background Running도 허용됨 하지만 보안 문제 때문에 기본으로 Apple에서 적용되는 앱 이외에는 거의 제한됨.
- 앱 종료
- Time out : 앱은 Not Running 상태가 됨. 메모리에서 내려감.
!
- 성공적으로 앱 종료시 → Suspend 상태 → 메모리 부족시, Not Running 상태
!
뷰 컨트롤러의 생명주기
iOS ) View Controller의 생명주기(Life-Cycle)
뷰가 보이고 사라지는 변화가 있을 때, 뷰 컨트롤러는 그에 해당하는 메소드 호출.
따라서 각각의 모든 뷰에는 뷰 생명주기가 적용됨.
!
viewDidLoad
- 화면에 뷰가 나타날 때 준비하는 작업
- 화면이 처음 만들어질 때 자동으로 한 번만 실행되므로 처음 한 번만 실행해야 하는 초기화 코드(리소스를 초기화하거나 초기 화면 구성)가 있을 경우 이 메소드에 작성
viewWillAppear
- 뷰가 나타날 것이라는 신호를 컨트롤러에게 알리는 역할
- viewDidLoad 와의 차이
- viewDidLoad, viewWillAppear 모두 뷰가 나타나기 직전에 호출되지만 다른뷰에서 갔다가 다시 돌아오는 상황에 해주고 싶은 처리는 viewWillAppear에서 처리
viewDidAppear
- 뷰가 나타났다는 것을 컨트롤러에게 알리는 역할
- 화면에 적용될 애니메이션을 그려줌
- 뷰가 화면에 나타난 직후 실행됨
viewWillDisappear
viewDidDisappear
- 해당 메소드가 호출되면 뷰 컨트롤러가 뷰가 제거되었음을 알려줌.
!
1st → 2nd
viewWillAppear → viewDidAppear x
!
2nd → 1st
viewDidLoad 호출x
!
loadView
- 컨트롤러가 관리하는 뷰를 만드는 역할
- 즉, loadView 메소드가 뷰를 만들고, 메모리에 올린 후, viewDidLoad가 호출됨.\
override func viewDidLoad(){}
override func viewWillAppear(_ animated: Bool) {}
2. **Responding to the launch of your app**