본문 바로가기

개발/iOS

[ios] 앱의 라이프 사이클(Life Cycle, 생명주기)

반응형

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