티스토리 뷰
Managing your app’s life cycle 에서 상세한 내용을 확인가능하다
- In iOS 13 and later, use
UISceneDelegateobjects to respond to life-cycle events in a scene-based app. ( iOS 13 이후에서는 UISceneDelegate를 사용 ) - In iOS 12 and earlier, use the
UIApplicationDelegateobject to respond to life-cycle events. ( iOS 12 이전에서는 UIApplicationDelegate를 사용 )
Respond to app-based life-cycle events (앱 기반 생명주기 이벤트에 반응)

실행 시, 앱의 데이터구조와 UI를 초기화
- 앱을 처음 실행하게 되면 시스템은 앱의 UI가 준비될 때까지 Launch Storyboard를 표시
- Launch 화면에서 정적이미지를 사용하면 안됨. iOS 14 이상에서는 Launch 화면이 25MB로 제한
- 앱의 초기화 코드는 두 함수중 하나 또는 둘 다에 작성
- application(_:willFinishLaunchingWithOptions:)
- application(_:didFinishLaunchingWithOptions:)
- 앱이 처음 실행될 때 필요한 일회성 설정을 실행
활성화 시, UI 구성을 완료하고 사용자와 상호 작용할 준비를 함
- 활성화 전 메서드 실행
- sceneWillEnterForeground(_ :) - scene을 지원하는 경우
- applicationWillEnterForeground(_ :) - 지원하지 않는 경우
- 활성화 시 메서드 실행
- sceneDidBecomeActive(_ :)
- applicationDidBecomeActive(_ :)
사용자에게 표시하기 전에 UI의 마무리 작업을 하는 시간
앱 외부에서 데이터가 자주 변경되는 경우 백그라운드 작업을 사용하여 네트워크에서 업데이트를 가져오고 그렇지 않은 경우 비동기로 변경 사항을 가져온느 동안 기존 데이터를 표시할 준비
- View가 나타나면 UI별 작업을 시작
- viewWillApperar(_ :)
- viewDidLoad(_ :)
비활성화 시, 데이터를 저장하고 앱을 중지한다
- 앱을 백그라운드 상태로 바로 시작하거나, 일시 중단된 앱을 백그라운드로 이동하여 작업을 수행할 수 있다. - 백그라운드로 작업을 할 경우 가능한 작게 하고 가장 좋은 것은 아무것도 안하는게 좋다
- 비활성화하는 동안 메서드 실행
- sceneWillResignActive(_ :)
- applicationWillResignActive(_ :)
- 백그라운드 진입시 메서드 실행
- sceneDidEnterBackground(_ :)
- applicationDidEnterBackground(_ :)
- 백그라운드 집입시 적합한 작업을 최대한 많이 수행
- 다시 만들거나 불러올 수 있는 미디어 또는 직접 읽은 이미지나 미디어를 삭제
- 카메라 및 공유 하드웨어 리소스에 대한 액세스를 해제
- 민감한 정보를 숨기고 알림 및 기타 임시 인터페이스를 해제
- 공유 시스템 데이터베이스에 대한 연결을 닫음
- Bonjour 서비스에서 등록을 취소하고, 모든 수신 소켓을 닫음( Bonjour : Local Network API )
- 모든 Metal Command 버퍼가 예약되어있는지 확인 ( 백그라운드에 들어가고 나서는 예약을 걸수없기 때문으로 보이는데 Metal Command는 iOS의 그래픽스 파트인듯 한데 상세한 내용을 모르겠다...)
- 모든 OpenGL 명령이 완료되었는지 확인
백그라운드 상태로 들어가면 중요한 작업을 끝내고, 가능한 메모리를 비우고, 앱 스냅샷을 준비
종료 시 모든 작업을 중단하고 공유 리소스를 해제
- applicationWillTerminate(_ :)
- 앱이 종료되고 메모리에사 완전히 제거될 것을 알림
- 공유 리소스해제, 사용자 데이터 저장, 타이머 무효화와 같은 앱의 최종 정리 작업을 수행
- 만약 앱이 종료되지 않고 백그라운드 실행을 지원하는 경우 해당 메서드는 실행되지 않음
사실 해당 문서에서 메서드의 경우 application과 scene으로 두가지를 설명하고 있지만 2024.07.18 기준 86%가 iOS17, 11%가 iOS16을 사용하고 있다고 집계되며 16이전의 버전의 경우 3%로 나온다 그러면 그중 iOS13 이전은 그 수가 매우 미미 하여 scene메서드만 사용한다고 보면 될듯하다
'프로그래밍 > iOS' 카테고리의 다른 글
| [Combine-2] Combine? Publisher? Subscriber? Operator? (0) | 2025.03.06 |
|---|---|
| [Combine-1] 동기(Sync), 비동기(Async) (0) | 2025.03.05 |
| SnapKit, Then 알아보자 (0) | 2025.03.04 |
