ios에서 앱의 상태 변화는 운영체가 처리하는 영역이다. ios에서 앱이 가질 수 있는 상태값은 다음과 같다.
Not Runnig | 앱이 시작되지 않거나 실행되었지만 시스템에 의해 종료된 상태를 나타낸다. |
Inactive | 앱이 전면에서 실행 중이지만, 아무런 이벤트를 받지 않고 있는 상태를 나타낸다. |
Active | 앱이 전면에서 실행 중이며, 이벤트를 받고 있는 상태를 나타낸다. |
Background | 앱이 백그라운드에 있지만 여전히 코드가 실행되고 있는 상태를 나타낸다. 대분의 앱은 Suspended 상태로 이행하는 도중에 일시적으로 이 상태에 진입하지만, 파일 다운로드나 업로드, 연산 처리 등 여분의 실행 시간이 필요한 앱일 경우 특정 시간 동안 이 상태로 남아 있게 되는 경우도 있다. |
Suspended | 앱이 메모리에 유지되지만 실행되는 코드가 없는 상태이다. 메모리가 부족한 상황이 오면 iOS 시스템은 포그라운드에 있는 앱의 여유 메모리 공간을 확보하기 위해 Suspended 상태에 있는 앱들을 특별한 알림 없이 정리한다. |
앱의 상태 변화란, 하나의 상태에서 다른 상태로 옮겨가는 중일 때를 상태 변화라고 한다. 상태가 변화할 때마다 앱 객체는 앱 델리게이트에 정의된 특정 메소드를 호출한다.
앱 델리게이트 객체의 주요 메소드
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
<#code#>
}
- 앱이 구동되어 필요한 초기 실행 과정이 완료되기 직전에 호출되는 메소드
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
- 앱이 사용자에게 화면으로 표시되기 직적에 호출되는 메소드. 앱이 실행된 후에 진행할 커스터마이징이나 초기화를 위한 코드를 여기에 작성하면 된다.
func applicationDidBecomeActive(_ application: UIApplication) {
<#code#>
}
- 실행된 앱이 포그라운드, 즉 화면 전면에 표시될 때 호출되는 메소드. 앱이 Inactive 상태에 들어가면서 일시 중지된 작업이 있다면 이를 재시작하는 코드를 여기에 작성해 주어야 한다. 예를 들어 타이머나 스톱워치 앱의 경우, Inactive 상태로 들어가면 더 이상 화면 갱신이 이루어지지 않고 예전 화면이 유지되므로 이 메소드를 통해 화면과 남은 시각 등을 갱신해 주어야 한다.
func applicationDidEnterBackground(_ application: UIApplication) {
<#code#>
}
- 앱이 백그라운드 상태에 진입했을 때 호출된다. 이 메소드가 호출된다는 것은 미래의 어느 순간에 앱이 종료된다는 의미이므로, 잃어서는 안 되는 사용자 데이터를 종료 전에 미리 저장하거나, 공유 자원을 점유하고 있었다면 이를 해제해 주어야 한다. 종료된 앱이 다시 실행될 때 현재의 상태를 복구할 수 있도록 필요한 상태 정보도 이 메소드에서 저장 처리하는 것이 좋다.
func applicationWillTerminate(_ application: UIApplication) {
<#code#>
}
- 앱이 종료되기 직전에 호출되는 메소드. 사용자 데이터 등을 종료 전에 한 번 더 저장해 두는 것이 좋다.
* 이외에도 앱 델리게이트 앱의 다양한 상태 변화에 대응하기 위한 메소드를 구현할 수 있다. 비활성화된다거나 혹은 저장된 상태로부터 복구된다거나 하는 등을 감지할 수 있고, 방향에 따라 화면을 회전할 것인지 고정할 것인지를 반환값을 통해 결정할 수도 있다. 자세한 메소드 목록은 UIAppDelegateProtocol의 공식 문서를 참조
- 꼼꼼한 재읜 씨의 Swift : 기본편 (p.80 ~ 82)
'개발 > iOS' 카테고리의 다른 글
[ios] 프레임워크의 계층 구조 (0) | 2020.12.27 |
---|---|
[ios] 코코아 터치 프레임 (0) | 2020.12.26 |
[ios] 핀치 제스처 (0) | 2019.05.04 |
[ios] 스와이프 제스처 (0) | 2019.05.03 |
[ios] 탭과 터치 (0) | 2019.05.01 |