NOW-ON / iOS-Interview-Preparation

iOS 면접 준비
3 stars 0 forks source link

앱의 생명주기 #7

Closed Glsme closed 1 year ago

Glsme commented 1 year ago

🗓️ 마감일

2023.01.15

💁 참여자

⚠️ 마지막으로 답변 단 사람이 이슈 close 하고 리드미에 항목 업데이트 해주세요.

Yun-YeoJin commented 1 year ago
스크린샷 2022-12-26 오후 4 18 22

앱 상태 5가지

  1. Not running : 앱이 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태
  2. Inactive(Foreground) : 앱이 실행되면서 foreground에 진입, 어떠한 이벤트도 받지 않는 상태 (잠깐 머무는 단계)
  3. active(Foreground) : 앱이 실행중, 이벤트를 받고 있는 상태
  4. Background : 다른 앱으로 전환 or 홈버튼을 눌러 밖에 있는 상태 -> 일정 시간이 지나면 Suspended 상태가 됨
  5. Suspended : 앱이 Background에 있지만, 아무 코드도 실행하지 않은 상태, 메모리 상에 올라가있지만, 배터리는 사용되지 않음. 메모리 부족현상 발생시 이 상태의 앱은 메모리에서 없어질 수 있다.

AppDelegate 객체 메서드

  1. application(_:willFinishLaunchingWithOptions) : 필요한 주요 객체 생성, 앱 실행 준비가 끝나기 직전 호출
  2. applicationDidFinishLaunching(_:) : 모든 준비가 끝난 후 화면이 사용자에게 보여지기 직전에 호출 (주로 초기화 코드 작성)
  3. applicationWillTerminate(_:) : 앱이 종료되기 직전에 호출
  4. sceneWillEnterForeground(_:) : 앱이 백그라운드나 not running에서 foreground로 들어가기 직전에 호출
  5. sceneWillResignActive(_:) : 홈바를 쓸어 올렸을 경우 ( 버튼이면 두 번 눌렀을 경우 )
  6. sceneDidBecomeActive(_:) : 앱이 비활성화 -> 활성화로 진입하고 난 직후 호출 (앱이 실제로 사용되기 전 준비할 수 있는 코드 작성)
  7. sceneDidEnterBackground(_:) : 앱이 백그라운드로 들어갔을 때 호출, 중요한 데이터를 저장하는 등 종료하기 전 필요한 작업
wodyddml2 commented 1 year ago

앱의 실행 / 종료 및 Foreground / Background의 상태에 있을 때, 시스템이 발생시키는 event로 인해 App의 상태가 전환되는 일련의 과정

→ UIKit이 main 함수를 다루는 과정에서 → UIApplicationMain 함수를 실행 → 이를 통해 UIApplication 객체 생성 → @UIApplicationMain 또는 @Main 어노테이션이 있는 클래스를 찾아 AppDelegate 객체 생성 → Main Event Loop 실행 (touch, text input 등 사용자 액션)

Main Run Loop란?

유저가 일으키는 이벤트들을 처리하는 프로세스 View와 관련된 이벤트나 View의 업데이트에 활용하기에 Main thread에서 실행

앱의 상태 5가지

스크린샷 2023-01-11 오후 5 31 58
Glsme commented 1 year ago
사이클 설명
Not Running 앱이 아직 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태
Inactive 앱이 실행중이지만 사용자로부터 event를 받을 수 없는 상태
Active 앱이 실행중이고, 사용자 event를 받아서 상호작용 할 수 있느 상태
Background 화면애 앱이 보지인 않지만 코드가 실행되고 있는 상태
Suspended 앱을 다시 실행했을 때 최근 작업을 빠르게 로드하기 위해 메모리에 관련 데이터만 저장되어있는 상태
heydoy commented 1 year ago

iOS 12 이전 (앱 기반 생명주기)

UIApplicationDelegate객체가 앱의 생명주기 이벤트에 반응

image

iOS 12까지는 앱이 씬을 지원하지 않음. UIKit이 모든 생명주기 이벤트를 UIApplicationDelegate객체에 전달. 앱델리게이트는 화면에 보여지는 별개의 스크린까지 포함하여 모든 앱의 윈도우를 관리. 그 결과로 앱의 상태 변화는 앱의 전체적인 UI에 영향을 끼침.

  1. 실행되면 앱의 데이터 구조와 UI를 초기화함
  2. activate 되면 UI 구성을 끝내고 사용자와 상호작용할 준비를 함
  3. deactivate 되면 데이터를 저장하고 앱의 동작을 정지
  4. 백그라운드 상태에 진입하면 중요한 작업을 끝내고 최대한 많은 메모리를 해제하고 앱의 스냅샷을 준비
  5. terminattion(종료)되면 모든 작업을 즉시 중단하고 공유자원을 모두 해제

iOS 13 이후 (씬 기반 생명주기)

UISceneDelegate객체가 씬 기반 앱의 생명주기 이벤트에 반응 앱이 씬을 지원할 경우 UIKit이 별개의 생명주기 이벤트를 전달.

image

  1. UIKit이 앱의 씬에 연결되면 씬의 처음 UI를 구성하고 씬에 필요한 데이터를 로드
  2. foreground-active 상태로 전환될 때 UI를 구성하고 사용자와 인터랙트할 준비를 함.
  3. foreground-active 상태를 떠날 때 데이터를 저장하고 앱의 동작을 멈춤
  4. background 상태에 진입하면 중요한 태스크를 끝내고 최대한 많은 메모리를 해제하고 앱의 스냅샷을 준비
  5. 씬 연결이 끊기면 씬과 관련된 공유자원을 청소함
  6. 씬과 관련된 이벤트에서는 UIApplicationDelegate 객체를 사용하여 앱 실행에 반응해야한다.
LeeJoobang commented 1 year ago