[UIKit]App Life Cycle / Scene Life Cycle / View Life Cycle

iOSoo·2021년 9월 12일
0
post-thumbnail

[App]

Life Cycle

  • Not Running
    : 앱이 실행되지 않은 상태
    : 실행되고 난 후, 시스템은 UI가 화면에 보여야한다면 앱을 inactive 상태에, 아니라면 background 상태에 둔다.
    : foreground로 시작할 때 시스템은 자동으로 앱을 active상태로 전환한다

  • Inactive
    : 앱이 foreground에서 실행중이지만 아무런 이벤트를 받지 않고 있는 상태
    : 앱의 화면은 보이지만 상호작용이 안되는 상태

  • Active
    : 앱이 foreground에서 실행중이며 이벤트를 받고 있는 상태
    : 앱의 화면도 보이고 상호작용도 되는 상태

  • Background
    : 앱이 background에 있으며 실행되는 코드가 있는 상태
    : 대부분 앱은 suspended상태로 이행하는 도중에 일시적으로 이 상태에 진입하지만 파일 다운로드, 업로드 등 특정 시간동안 이 상태로 남아있게 되는 경우도 있음
    : 시스템이 임의로 Background 상태의 앱을 Suspended 상태로 만든다

  • Suspended
    : 앱이 background에 있지만 실행되는 코드가 없는 상태
    : 메모리가 부족한 상황이 오면 iOS system은 foreground에 있는 앱의 여유 메모리 공간 확보를 위해 이 상태에 있는 앱들을 특별한 알림없이 정리할 수도 있음

관련 메서드

[Scene]

Life Cycle

  • Unattached
    : scene이 연결되지 않은 상태

  • Foreground Inactive
    : 앱이 foreground에서 실행중이지만 아무런 이벤트를 받지 않고 있는 상태
    : 앱의 화면은 보이지만 상호작용이 안되는 상태

  • Foregroud Active
    : 앱이 foreground에서 실행중이며 이벤트를 받고 있는 상태
    : 앱의 화면도 보이고 상호작용도 되는 상태

  • Background
    : 앱이 background에 있으며 실행되는 코드가 있는 상태
    : 대부분 앱은 suspended상태로 이행하는 도중에 일시적으로 이 상태에 진입하지만 파일 다운로드, 업로드 등 특정 시간동안 이 상태로 남아있게 되는 경우도 있음
    : 시스템이 임의로 Background 상태의 앱을 Suspended 상태로 만든다

  • Suspended
    : 앱이 background에 있지만 실행되는 코드가 없는 상태
    : 메모리가 부족한 상황이 오면 iOS system은 foreground에 있는 앱의 여유 메모리 공간 확보를 위해 이 상태에 있는 앱들을 특별한 알림없이 정리할 수도 있음

관련 메서드

[App Life Cycle vs Scene Life Cycle]

1. Scene-based는 inactive, active라는 네이밍 앞에 foreground를 명시적으로 붙였다.

2. App-based는 not running과 suspended사이에 화살표가 있는데, Scene-based는 unattached와 suspended 사이 화살표가 없다

3. App-based는 suspended에서 inactive로 가는 화살표가 있었는데, Scene-Based는 suspended에서 foreground inactive로 가는 화살표가 없다.

[View]

Life Cycle

View Life Cycle의 주기

  • loadView
    : 뷰 컨트롤러가 자신의 뷰, 그러니까 흔히 self.view처럼 접근하는 그 뷰 컨트롤러의 메인 뷰를 로드할 때 호출되는 메서드

  • viewDidLoad
    : View가 로딩된 직후에 로직을 실행해라
    사용 예시) 화면이 처음 만들어질 때 한 번만 실행되므로, 처음 한 번만 실행해야 하는 초기화 코드가 있을 경우 이 메소드 내부에 작성 (앱 초기작업)

  • viewWillAppear
    : View가 나타나기 직전에 로직을 실행해라
    사용 예시) 다른뷰에 갔다가 다시 돌아오는 상황에 로직을 실행하고 싶을 때

  • viewDidAppear
    : View가 나타난 직후에 로직을 실행해라
    사용 예시) 뷰가 나타났다는 것을 컨트롤러에게 알리는 역할을 합니다. 또한 화면에 적용될 애니메이션을 그려줘요

  • viewWillDisappear
    : View가 사라지기 직전에 로직을 실행해라
    사용 예시) 뷰가 삭제 되려고하고있는 것을 뷰 콘트롤러에 통지

  • viewDidDisappear
    : View가 사라진 직후에 로직을 실행해라
    사용 예시) 뷰 컨트롤러가 뷰가 제거되었음을 알려줌

[background vs suspended]

background : 앱을 나가도 코드가 실행되는 상태

  • 예를 들어 음악 재생, GPS, 녹음 등의 기능은 앱을 끄거나 다른 앱으로 넘어가도 계속 실행

suspended : 앱이 Background 상태에 있지만, 아무 코드도 실행하지 않는 상태

  • 앱이 memory에는 유지되지만 memory 부족 상태가 나타나면 system이 memory에서 제거
  • background에서 특별히 수행해야 하는 기능이 없다면 background 상태를 거쳐서 suspended 상태로 넘어감

[참고]

https://eunjin3786.tistory.com/163
https://zeddios.tistory.com/43
https://sihyungyou.github.io/iOS-lifecycle/

profile
애플을 좋아하는 비전공생

0개의 댓글