앱의 상태 변화
앱은 실행되는 동안 다양한 상태로 변화한다.
앱의 상태 변화는 운영체제가 처리하는 영역.
iOS에서 앱이 가질 수 있는 상태값
Not Running
앱이 시작되지 않았거나 실행되었지만 시스템에 의해 종료된 상태
Inactive
앱이 전면에서 실행 중이지만, 이벤트를 받지 않고 있는 상태
Active
앱이 전면에서 실행 중이며, 이벤트를 받고 있는 상태
Background
앱이 백그라운드에 있지만 여전히 코드가 실행되고 있는 상태
대부분의 앱은 Suspended 상태로 이행하는 도중에 일시적으로 이 상태에 진입하지만, 파일 다운로드나 업로드, 연산 처리 등 여분의 실행 시간이 필요한 앱일 경우 특정 시간 동안 이 상태로 남아 있게 되는 경우도 있다.
Suspended
앱이 메모리에 유지되지만 실행되는 코드가 없는 상태
메모리가 부족한 상황이 오면 iOS 시스템은 포그라운에 있는 앱의 여유 메모리 공간을 확보하기 위해 Suspended 상태에 있는 앱들을 특별한 알림 없이 정리한다.
생명 주기(Life Cycle)
application(_:willFinishLaunchingWithOPerations:)
앱이 구동되어 필요한 초기 실행 과정이 완료되기 직전에 호출되는 메소드
application(_:didFinishLaunchingWithOptions:)
앱이 사용자에게 화면으로 표시되기 직전에 호출되는 메서드.
앱이 실행된 후에 진행할 커스터마이징이나 초기화를 위한 코드를 여기에 작성
applicationDidBecomeActive(_:)
실행된 앱이 포그라운드, 즉 화면 전면에 표시될 때 호출되는 메소드
앱이 Inactive 상태에 들어가면서 일시 중지된 작업이 있다면 이를 재시작하는 코드를 여기에 작성해 주어야 한다.
applicationDidEnterBackground(_:)
앱이 백그라운드 상태에 진입했을 때 호출
이 메소드가 호출된다는 것은 미래의 어느 순간에 앱이 종료된다는 의미!
잃어서는 안되는 사용자 데이터를 종료 전에 미리 저장하거나, 공유 자원을 점유하고 있었다면 이를 해제해 주어야 한다.
종료된 앱이 다시 실행될 때 현재의 상태를 복구할 수 있도록 필요한 상태 정보도 이 메소드에서 저장 처리하는 것이 좋다.
applicationWillTerminate(_:)
앱이 종료하기 직전에 호출되는 메서드
사용자 데이터 등을 종료 전에 한 번 더 저장해 두는 것이 좋다.
발췌 - 꼼꼼한 재은씨의 Swift 3