[iOS] life_cycle

JJOOEE__·2024년 7월 8일
0

Today I Learned....

목록 보기
15/19
post-thumbnail

app's life_cycle apple

🍏scene-based life-cycle

iOS 13 이상에서는 객체를 사용하여 장면 기반 앱의 라이프사이클 이벤트에 응답합니다.UISceneDelegate

UIKit의 장면(Scene) 지원 기능은 iOS 13부터 도입된 멀티윈도우 환경을 지원하는 기능

◻️ 장면 기반 앱의 라이프사이클

  1. 연결되지 않음 (Unattached): 장면이 존재하지만 아직 앱에 연결되지 않은 상태입니다.
  2. 포그라운드 활성 (Foreground Active): 장면이 포그라운드에 있고 활성 상태로, 사용자와 상호작용할 수 있는 상태입니다.
  3. 포그라운드 비활성 (Foreground Inactive): 장면이 포그라운드에 있지만 일시적으로 비활성화된 상태입니다. 전화가 오거나 알림이 나타날 때와 같은 경우에 해당합니다.
  4. 백그라운드 (Background): 장면이 백그라운드에서 실행 중인 상태로, 사용자와 상호작용할 수 없습니다.
  5. 일시 중단 (Suspended): 장면이 백그라운드에서 일시 중단된 상태로, 시스템 리소스를 절약하기 위해 코드 실행이 중단된 상태입니다.

◻️ 상태 전환 메서드

  1. 연결되지 않음 -> 포그라운드 활성:
    • scene(:willConnectTo:options:): 장면이 앱에 연결될 때 호출됩니다. 이 메서드에서 장면의 초기 UI를 구성하고 필요한 데이터를 로드합니다.
    • sceneDidBecomeActive(
    :): 장면이 포그라운드에서 활성 상태가 될 때 호출됩니다. UI를 구성하고 사용자와 상호작용할 준비를 합니다.
  2. 포그라운드 활성 -> 포그라운드 비활성:
    • sceneWillResignActive(_:): 장면이 일시적으로 비활성화될 때 호출됩니다. 데이터를 저장하고 앱의 동작을 조용히 합니다.
  3. 포그라운드 비활성 -> 백그라운드:
    • sceneDidEnterBackground(_:): 장면이 백그라운드로 전환될 때 호출됩니다. 중요한 작업을 끝내고, 가능한 한 많은 메모리를 비우고, 앱 스냅샷을 준비합니다.
  4. 백그라운드 -> 포그라운드 비활성:
    • sceneWillEnterForeground(_:): 장면이 백그라운드에서 포그라운드로 전환될 때 호출됩니다. 포그라운드로 복귀하기 전에 필요한 준비 작업을 수행합니다.
  5. 포그라운드 비활성 -> 포그라운드 활성:
    • sceneDidBecomeActive(_:): 장면이 포그라운드에서 활성 상태가 될 때 호출됩니다. UI를 구성하고 사용자와 상호작용할 준비를 합니다.
  6. 백그라운드 -> 연결되지 않음:
    • sceneDidDisconnect(_:): 장면의 연결이 해제될 때 호출됩니다. 이 메서드에서 장면과 연관된 모든 공유 리소스를 정리합니다.

◻️ 장점

• 향상된 멀티태스킹: 사용자는 여러 개의 창을 동시에 열어 독립적으로 작업할 수 있습니다.
• 유연성: 각 장면이 독립적으로 관리되므로 다양한 사용 시나리오를 지원할 수 있습니다.
• 분리된 관리: 장면별로 상태를 관리하여 코드의 모듈화와 유지보수가 용이합니다.

◻️ 단점

• 복잡성 증가: 여러 장면의 상태를 각각 관리해야 하므로 코드 구조가 복잡해질 수 있습니다.
• 추가 학습 필요: 장면 기반 라이프사이클과 관련된 새로운 개념과 API를 학습해야 합니다.
• 리소스 관리: 여러 장면이 동시에 활성화되면 시스템 리소스를 더 많이 사용하게 됩니다.

🍏app-based life-cycle

iOS 12 및 이전 버전에서는 객체를 사용하여 라이프 사이클 이벤트에 응답합니다.UIApplicationDelegate

◻️ 앱 기반 라이프사이클

  1. Not Running: 앱이 실행되지 않는 상태입니다.
    1. Inactive: 앱이 포그라운드에 있지만 사용자 이벤트를 처리하지 않는 상태입니다. 예를 들어, 전화가 오거나 알림이 나타날 때와 같은 경우입니다.
    2. Active: 앱이 포그라운드에 있고 사용자 이벤트를 처리하는 상태입니다.
    3. Background: 앱이 백그라운드에서 실행 중인 상태로, 사용자와 상호작용할 수 없습니다.
    4. Suspended: 앱이 메모리에 있지만 코드가 실행되지 않는 상태입니다. 시스템 자원 부족 시 앱이 이 상태에서 종료될 수 있습니다.

◻️ 상태 전환 메서드

  1. 앱 시작 (Not Running -> Active 또는 Inactive):
    • application(_:didFinishLaunchingWithOptions:): 앱이 시작될 때 호출됩니다. 여기서 데이터 구조를 초기화하고 UI를 설정합니다.
  2. 포그라운드 활성화 (Inactive -> Active):
    • applicationDidBecomeActive(_:): 앱이 활성 상태로 전환될 때 호출됩니다. UI 구성을 완료하고 사용자와 상호작용할 준비를 합니다.
  3. 포그라운드 비활성화 (Active -> Inactive):
    • applicationWillResignActive(_:): 앱이 일시적으로 비활성화될 때 호출됩니다. 데이터를 저장하고 앱의 동작을 조용하게 합니다.
  4. 백그라운드로 전환 (Inactive -> Background):
    • applicationDidEnterBackground(_:): 앱이 백그라운드로 전환될 때 호출됩니다. 중요한 작업을 끝내고, 가능한 한 많은 메모리를 비우고, 앱 스냅샷을 준비합니다.
  5. 포그라운드 복귀 (Background -> Inactive):
    • applicationWillEnterForeground(_:): 앱이 백그라운드에서 포그라운드로 전환될 때 호출됩니다. 포그라운드로 복귀하기 전에 필요한 준비 작업을 수행합니다.
  6. 앱 종료 (Any State -> Not Running):
    • applicationWillTerminate(_:): 앱이 종료될 때 호출됩니다. 모든 작업을 즉시 중지하고 공유 리소스를 해제합니다. (이 메서드는 앱이 백그라운드에서 강제 종료될 경우 호출되지 않을 수 있습니다.) \

    ◻️ 장점

    • 간단한 구조: 단일 창과 UI를 관리하기 때문에 코드 구조가 간단합니다.
    • 일관성: 모든 상태 전환이 중앙화되어 있어 관리하기 쉽습니다.
    • 낮은 복잡도: 여러 창이나 UI 인스턴스를 관리할 필요가 없어 개발이 용이합니다.

◻️ 단점

• 제한된 멀티태스킹: 하나의 UI만을 제공하므로 멀티윈도우 환경을 지원하지 않습니다.
• 유연성 부족: 여러 개의 독립적인 UI 인스턴스를 동시에 처리할 수 없기 때문에 사용자 경험이 제한됩니다.

🍏 scene-based life-cycle vs app-based life-cycle

◻️ 차이점

🌈 app-based life-cycle 앱 기반 라이프사이클 (iOS 12 이하 또는 장면을 지원하지 않는 앱)

• 중앙화된 상태 관리: UIApplicationDelegate를 통해 앱의 전체 라이프사이클을 관리합니다.
• 단일 UI 인스턴스: 하나의 앱 인스턴스만을 관리하며, 단일 창과 UI 구성 요소를 관리합니다.
• 상태 전환: 앱 전체의 상태 전환에 대한 메서드 (applicationDidBecomeActive, applicationDidEnterBackground 등)를 구현합니다.

🌈scene-based life-cycle 장면 기반 라이프사이클 (iOS 13 이상, 멀티윈도우 지원)

• 분산된 상태 관리: 각 장면(UISceneDelegate)에 대해 독립적인 라이프사이클 메서드를 제공합니다.
• 여러 UI 인스턴스: 하나의 앱 내에서 여러 개의 장면을 동시에 관리할 수 있습니다.
• 상태 전환: 각 장면마다 별도의 상태 전환 메서드 (sceneWillEnterForeground, sceneDidEnterBackground 등)를 구현합니다.

🌈 app's life_cycle apple 공식 문서

profile
개발이 어려운 나를 위한... 개발노트

0개의 댓글