본문 바로가기
모바일앱/iOS

App의 생명주기

by GeekCode 2022. 2. 22.
반응형

App의 생명주기

 

App의 생명주기는 아래 5가지 상태를 가진다.

  • Not Running : 실행되지 않은 상태
  • In Active : 앱이 실행 중인 상태이지만 아무런 event를 받지 않은 상태
  • Active : 앱이 실행중이며 event가 발생한 상태
  • BackGround : 앱이 BackGround에 있는 상태이지만 실해오디는 코드가 있는 상태
  • Suspended : 앱이 BackGround에 있고 실행되는 코드가 없는 상태

앱이 동작하는 과정을 나누어보면 아래 4가지 상태를 볼 수 있다.

  • 앱을 시작할 때
  • 앱을 비활성화 할 때
  • 앱을 활성화 할 때
  • 앱을 종료할 때


  • application didFinishLaunchingWithOptions
    :(NSDictionary *)launchOptions => 어플리케이션이 처음 실행될 때. (처음 메모리상에 올라가게 될 때를 말함)
  • (void)applicationDidBecomeActive:(UIApplication *)application => 어플리케이션이 활성화 될 때, 즉 didFinishLaunchingWithOption 호출 직후, 어플리케이션이 백그라운드로 돌아갔다가 다시 불러질 때 호출
  • (void)applicationWillResignActive:(UIApplication *)application => 어플리케이션이 백그라운드로 들어가기 직전(홈버튼을 누른 직후)에 호출 됨
  • (void)applicationDidEnterBackground: 어플리케이션이 백그라운드로 완전히 들어갔을 때 호출됨
  • (void)applicationWillEnterForeground:(UIApplication *)application => 어플리케이션이 다시 활성되기 직전에 호출됨 (백그라운드 상에서 다시 어플리케이션이 활성되면 willEnterForeground 호출 후 applicationDidBecomeActive 호출)
  • (void)applicationWillTerminate:(UIApplication *)application => 어플리케이션이 완전히 종료되기 직전에 호출 됨

꼭 다시 볼것

https://woozzang.tistory.com/78

앱의 실행과정

  1. App Touch
  2. main() 안에서 UIApplicationMain() 호출, UIApplication 객체 생성
  3. UIApplication 객체는 info.plist 파일으로부터 앱에 필요한 데이터와 객체들을 로드
  4. 커스텀 코드를 처리하기 위한 AppDelegate를 생성하고 이를 UIApplication 객체와 연결
  5. 실행을 준비하고 application(_:willFinishLaunchingWithOptions:) 호출
  6. 준비가 끝나고 앱 실행 직전에 application(_:didFinishLaunchingWithOptions:) 호출
  7. Main run loop 실행, 이벤트 큐를 이용해 이벤트 순차 처리,
  8. 앱을 더이상 사용하지 않으면 iOS Systemterminate 메시지 전달applicationWillTerminate(_:) 호출
  9. App종료

Swift는 C 계열의 언어가 아니기 때문에 main()과 같은 시작점을 갖지 않는다.

따라서, @UIApplicationMain 이라는 어노테이션을 통해 UIApplication 객체 생성 과정을 대신한다.

모든 iOS 앱들은 UIApplication 함수를 실행한다.

이 때 생성되는 것 중 하나가 UIApplication 객체이며 이는 Singleton 형태로 생성되어, UIApplication.shared 형태로 앱 전역에서 사용이 가능하다.

 

반응형