티스토리 뷰

프로그래밍/iOS

뷰컨트롤러 생명주기

시르베어 2024. 7. 18. 18:36

Managing your app’s life cycle 에서 상세한 내용을 확인가능하다

  • In iOS 13 and later, use UISceneDelegate objects to respond to life-cycle events in a scene-based app. ( iOS 13 이후에서는 UISceneDelegate를 사용 )
  • In iOS 12 and earlier, use the UIApplicationDelegate object 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로 제한
  • 앱의 초기화 코드는 두 함수중 하나 또는 둘 다에 작성
    1. application(_:willFinishLaunchingWithOptions:)
    2. application(_:didFinishLaunchingWithOptions:)
  • 앱이 처음 실행될 때 필요한 일회성 설정을 실행

활성화 시, UI 구성을 완료하고 사용자와 상호 작용할 준비를 함

  • 활성화 전 메서드 실행
    1. sceneWillEnterForeground(_ :) - scene을 지원하는 경우
    2. applicationWillEnterForeground(_ :) - 지원하지 않는 경우
  • 활성화 시 메서드 실행
    1. sceneDidBecomeActive(_ :)
    2. applicationDidBecomeActive(_ :)
      사용자에게 표시하기 전에 UI의 마무리 작업을 하는 시간
      앱 외부에서 데이터가 자주 변경되는 경우 백그라운드 작업을 사용하여 네트워크에서 업데이트를 가져오고 그렇지 않은 경우 비동기로 변경 사항을 가져온느 동안 기존 데이터를 표시할 준비
  • View가 나타나면 UI별 작업을 시작
    1. viewWillApperar(_ :)
    2. viewDidLoad(_ :)

비활성화 시, 데이터를 저장하고 앱을 중지한다

  • 앱을 백그라운드 상태로 바로 시작하거나, 일시 중단된 앱을 백그라운드로 이동하여 작업을 수행할 수 있다. - 백그라운드로 작업을 할 경우 가능한 작게 하고 가장 좋은 것은 아무것도 안하는게 좋다
  • 비활성화하는 동안 메서드 실행
    1. sceneWillResignActive(_ :)
    2. applicationWillResignActive(_ :)
  • 백그라운드 진입시 메서드 실행
    1. sceneDidEnterBackground(_ :)
    2. applicationDidEnterBackground(_ :)
  • 백그라운드 집입시 적합한 작업을 최대한 많이 수행
    1. 다시 만들거나 불러올 수 있는 미디어 또는 직접 읽은 이미지나 미디어를 삭제
    2. 카메라 및 공유 하드웨어 리소스에 대한 액세스를 해제
    3. 민감한 정보를 숨기고 알림 및 기타 임시 인터페이스를 해제
    4. 공유 시스템 데이터베이스에 대한 연결을 닫음
    5. Bonjour 서비스에서 등록을 취소하고, 모든 수신 소켓을 닫음( Bonjour : Local Network API )
    6. 모든 Metal Command 버퍼가 예약되어있는지 확인 ( 백그라운드에 들어가고 나서는 예약을 걸수없기 때문으로 보이는데 Metal Command는 iOS의 그래픽스 파트인듯 한데 상세한 내용을 모르겠다...)
    7. 모든 OpenGL 명령이 완료되었는지 확인

백그라운드 상태로 들어가면 중요한 작업을 끝내고, 가능한 메모리를 비우고, 앱 스냅샷을 준비

종료 시 모든 작업을 중단하고 공유 리소스를 해제

  • applicationWillTerminate(_ :)
    1. 앱이 종료되고 메모리에사 완전히 제거될 것을 알림
    2. 공유 리소스해제, 사용자 데이터 저장, 타이머 무효화와 같은 앱의 최종 정리 작업을 수행
    3. 만약 앱이 종료되지 않고 백그라운드 실행을 지원하는 경우 해당 메서드는 실행되지 않음

사실 해당 문서에서 메서드의 경우 application과 scene으로 두가지를 설명하고 있지만 2024.07.18 기준 86%가 iOS17, 11%가 iOS16을 사용하고 있다고 집계되며 16이전의 버전의 경우 3%로 나온다 그러면 그중 iOS13 이전은 그 수가 매우 미미 하여 scene메서드만 사용한다고 보면 될듯하다

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함