본문 바로가기
iOS/Swift

[iOS] Life Cycle

by 안녕주 2021. 10. 16.

Life Cycle(생명주기)란?

  • 태어나고 죽기까지 하나의 연결된 과정.
  • 우리가 개발할 iOS APP 또한 생명주기가 있다.

 

앱의 상태(App State) 변화

  1. Not Running
    • 앱이 실행되지 않거나 종료된 상태
  2. Inactive
    • foreground에서 running되고 있지만, 이벤트는 수신하지 않는 상태.
    • 전화를 걸었을 때, SMS 메세지가 수신되었을 때의 짧은 순간
  3. Active
    • foreground에서 실행되고 이벤트를 수신하는 상태
  4. Background
    • 앱이 background에서 실행되고 코드를 실행시키는 상태.
    • 파일 다운로드나, 업로드 등 실행 시간이 필요한 앱인 경우 특정 시간동안 이 상태로 남아있게 되는 경우가 있음
    • 앱이 suspended 상태에서 다시 실행되면 앱은 background → inactive → active 상태로 전환된다.
    • 또한 앱이 바로 background 상태로 실행된다면, background 상태가 inactive 상태를 대신하게 된다.
  5. Suspended
    • background 상태에서 활동을 멈춘 상태
    • 빠른 재실행을 위하여 메모리에 적재된 상태지만 실질적으로 동작하고 있지는 않음
    • 메모리가 부족할 때 suspended 상태에 있는 앱들을 먼저 강제종료한다.

 


App Life-Cycle

Xcode에서 iOS App Project를 생성하면 AppDelegate와 SceneDelegate가 기본으로 있습니다.

 

AppDelegate.swift 와 ScenceDelegate

iOS13버전 이전에는 appDelegate가 Process Lifecycle(응용 프로그램에 프로세스 수준이벤트를 알리는 것)과 UI LifeCycle(응용 프로그램에 UI 상태를 알리는 것)를 담당했다. 앱은 오직 '하나의 프로세스'와 그에 맞는 '하나의 UI'만 가졌기 때문이다.

 

하지만 iOS13 버전 부터 멀티윈도우를 지원하면서 하나의 앱에 하나의 화면(window)가 아닌 하나의 앱에서 여러개의 scene을 가질 수 있게 되었다. UILifecycle의 역할을 Scene Delegate가 하게 되었다.

 

AppDelegatee.swift

  1. func application(_:didFinishLaunchingWithOptions:)
    • 앱이 처음 시작될 때, 앱이 사용자에게 화면으로 표시되기 직전에 호출됨
  2. func applicationDidBecomeActive(UIApplication)
    • 앱이 active될 때 실행
  3. func applicationWillResignActive(UIApplication)
    • 앱이 active에서 inactive로 이동 될 때 실행
  4. func applicationDidEnterBackground(UIApplication)
    • 앱이 background에서 foreground로 이동 될 때 실행
  5. func applicationWillEnterForeground(UIApplication)
    • 앱이 background에서 foreground로 이동 될 때 실행
  6. func applicationWillTerminate(UIApplication)
    • 앱이 종료될 때 실행(suspend 상태에서 종료될 때에는 호출되지 않음)

 


ViewController

한 화면에서 다른 화면으로 전환될 때 각 화면(view)마다 나타났다 사라지는 생명주기가 있다. 이러한 view들을 관리하는 것이 ViewController다.

  • 컨텐츠를 화면에 표시하는 뷰를 관리하고 해당 뷰에 대한 참조를 유지
  • 이외에도 화면 내에 다양한 기능들을 담당
  • View의 LifeCycle에 대한 상태 변화 감지

 

뷰의 상태 변화 감지 메서드

  1. func viewDidLoad()
    • 뷰 계층이 메모리에 로드된 직후 호출되는 메서드
    • 뷰의 추가적인 초기화 작업을 하기 좋은 시점
    • 메모리에 처음 로딩될 때 1번 호출되는 메서드로, 메모리 경고로 뷰가 사라지지 않는 이상 다시 호출되지 않음
  2. func viewWillAppear(_ animated: Bool)
    • 뷰가 뷰 계층에 추가되고 화면이 표시되기 직전에 호출되는 메서드
    • 뷰의 추가적인 초기화 작업을 하기 좋은 시점
    • 다른 뷰로 이동했다가 되돌아오면 재호출되는 메서드로, 화면이 나타날 때마다 수행해야하는 작업을 수행하기 좋은 시점
  3. func viewDisAppear(_ animated: Bool)
    • 뷰가 뷰 계층에 추가되어 화면이 표시되면 호출되는 메서드
    • 뷰가 나타내는 것과 관련된 추가적인 작업을 하기 좋은 시점
  4. func viewWillDisappear(_ animated: Bool)
    • 뷰가 뷰 계층에서 사라지기 직전에 호출되는 메서드
    • 뷰가 생성된 뒤 발생한 변화를 이전상태로 되돌리기 좋은 시점
  5. func viewDidDisappear(_ animated: Bool)
    • 뷰가 뷰 계층에서 사라진 후 호출되는 메서드
    • 뷰를 숨기는 것과 관련된 추가적인 작업을 하기 좋은 시점
    • 시간이 오래 걸리는 작업은 하지 않는 것이 좋음

 

iOS ) View Controller의 생명주기(Life-Cycle)

iOS ) View의 생명주기2(Life-Cycle) / navigation controller

'iOS > Swift' 카테고리의 다른 글

[iOS] WirdCard Pattern, 와일드카드 패턴  (1) 2021.11.14
[iOS]클로저 Closure  (0) 2021.11.07
[iOS] Protocol과 Delegate  (0) 2021.10.31
[iOS] Struct와 Class  (0) 2021.10.23
[iOS] @IBOutlet과 @IBAction  (0) 2021.10.16

댓글