시스템 프레임워크는 사용자가 앱 아이콘을 터치하여 실행했을 때 이를 인식하고 앱을 구동해준다.
그러면 최초에 main() 함수가 실행되고, 함수 내부에서 UIApplicationMain() 함수를 호출하면 앱이 구동된다. (스위프트에서는 @main 어노테이션을 찾아 해당하는 클래스를 실행)
커스텀 코드 쪽에서는 앱 델리게이트 클래스에 작성된 application(_:didFinishingLaunchingWithOperations:) 메소드가 시스템에 의해 자동으로 호출된다. AppDelegate 클래스의 application(_:didFinishingLaunchingWithOperations:) 메소드에는 앱이 처음 시작될 때 실행될 코드를 작성해줄 수 있다.
이어서 시스템 프레임워크의 이벤트 루프가 실행되면서 우리가 작성하는 이벤트 핸들에 의해 커스텀 코드로 연결된다.
(핸들 == @IBAction 메소드 )
앱이 더이상 사용되지 않으면 시스템은 앱을 메모리에서 제거하기 위한 준비를 하는데, 이 과정에서 applicationWillTerminate(_:) 메소드를 호출한다. applicationWillTerminate(_:) 메소드의 내부에는 앱 종료시에 처리해야 할 내용을 작성해줄 수 있다.
앱 델리게이트 프로토콜에는 그 밖에도 더 많은 메소드가 정의되어 있고, 각 메소드는 사전에 약속된 시점에 맞춰 시스템에 의해 호출된다.
이처럼 iOS 시스템에 의해 특정 시점마다 호출해주는 메소드가 이미 정의되어 있으므로 우리는 지정된 메소드에 커스텀 코드를 작성하기만 하면 앱의 생명 주기에 맞춰서 원하는 내용을 실행시킬 수 있다.
[ iOS 앱의 상태 종류 ]
- Not Running : 앱이 시작되지 않음, 실행되었지만 시스템에 의해 종료됨
- Inactive : 앱이 전면에서 실행 중이지만, 아무런 이벤트를 받지 않고 있음
- Active : 앱이 전면에서 실행 중이며, 이벤트를 받고 있음
- Background : 앱이 백그라운드에 있지만 여전히 코드가 실행되고 있음
- Suspended : 앱이 메모리에 유지되지만 실행되는 코드가 없는 상태 (메모리가 부족해지면 iOS 시스템은 포어그라운드에 있는 앱의 여유 메모리를 확보하기 위해 Suspended 상태의 앱들을 정리함)
앱의 실행 상태가 변할 때마다 앱 객체는 앱 델리게이트에 정의된 특정 메소드를 호출한다.
이 메소드 내부에 적절한 커스텀 코드를 작성함으로써 원하는 작업이 실행되도록 할 수 있다. ex) 앱 종료 전에 데이터 저장, 백그라운드 상태로 내려가면 필요 없는 메모리 정리 등
[ AppDelegate 객체의 주요 메소드 ]
앱 델리게이트 객체에는 다양한 메소드들이 정의되어 있고, 각 메소드들은 모두 그에 맞는 상태 변화에 따라 호출된다.
- application(_:willFinishLaunchingWithOptions:) : 앱 구동에 필요한 초기 실행 과정이 완료되기 직전에 호출되는 메소드
- application(_:didFinishLaunchingWithOptions:) : 앱이 사용자에게 화면으로 표시되기 직전에 호출되는 메소드
- applicationDidBecomeActive(_:) : 실행된 앱이 foreground 상태일 때(화면 전면에 표시될 때) 호출되는 메소드
- applicationDidEnterBackground(_:) : 앱이 백그라운드 상태에 진입했을 때 호출되는 메소드
- applicationWillTerminate(_:) : 앱이 종료되기 직전에 호출되는 메소드
그 밖에 다른 메소드들은 UIAppDelegateProtocol의 공식 문서 참고
https://developer.apple.com/documentation/uikit/uiapplicationdelegate
Apple Developer Documentation
developer.apple.com
'iOS' 카테고리의 다른 글
[ iOS ] 화면 전환 시 값 전달 방식 (UIKit) (0) | 2023.02.15 |
---|---|
[ iOS ] Unwind - 화면 복귀 (UIKit) (0) | 2023.02.13 |
[ iOS ] 화면 전환 방식 (UIKit) (0) | 2023.02.10 |
[ iOS ] 코코아 터치 프레임워크의 주요 프레임워크와 접두어 정리 (0) | 2023.02.08 |
[ iOS ] 개발 시 기본적인 용어 정리 (UIKit) (0) | 2023.02.07 |