[iOS] iOS 앱의 생명 주기

Kiwi·2024년 4월 24일

iOS

목록 보기
12/15
post-thumbnail

📖 앱의 초기화 과정

c언어와 마찬가지로 iOS 앱도 main()함수로 부터 시작한다!

1. User taps application icon

2. main()

Xcode에서 프로젝트를 생성하면 main() 함수가 자동으로 만들어지며, 여기에는 앱이 실행될 때 처리해야할 내용이 작성되어 있다. (그래서 개발자가 딱히 신경쓸 필요가 없음!) iOS 앱에서 main()함수가 하는 일은 실행 시 시스템으로부터 전달받은 두 개의 인자값과 AppDelegate 클래스를 이용하여 UIApplicationMain( ) 함수를 호출하고, 그 결과로 UIApplication 객체를 반환한다.

3. UIApplicationMain()

이때 호출되는 UIApplicationMain()이 iOS앱의 엔트리 포인트이다. 이 함수는 앱의 핵심 객체를 생성하는 프로세스를 핸들링하고,스토리보드 파일로부터 앱의 유저 인터페이스를 읽어 들일뿐만 아니라 우리가 작성한 커스텀 코드를 호출해 줌으로써 앱 생성 초기에 필요한 설정을 구현할 수 있게 해 준다. 사실상 거의 앱 실행에 필요한 전반적인 것을 관리한다고 생각하면 된다. 즉, UIApplication 객체 == 앱 프로세스!
UlApplication 객체는 Info.plist 파일을 바탕으로 앱에 필요한 데이터와 객체를 로드한다.

4. applicationDidFinishLaunching

AppDelegate는 UIApplication으로부터 위임받은 일부 권한을 이용하여 커스텀 코드와 상호작용하는 역할을 담당하고,이를 통해 우리가 필요한 코드를 구현할 수 있도록 도와준다. 이 메소드에 원하는 커스텀 코드를 작성해 두면 앱이 처음 시작될 때 해당 코드를 실행할 수 있다! 런치스크린 설정할때 이 메서드에 sleep()을 넣은 이유가 이거였다!!!!!!!

5. event loop <-> handle event

6. system asks application to terminate <-> applicationWillTerminate

앱이 더 이상 사용되지 않는다면 시스템은 앱을 메모리에서 제거할려고 할 것이다. 이 때 AppDelegate 클래스의 applicationWillTerminate(_:) 메소드를 호출해 종료시 실행된다.




📖 앱의 상태 변화

앱의 상태란? 앱이 실행되는 동안 변하는 모습?이라고 할 수 있다. (활성, 비활성 등등) 앱의 상태 변화는 운영체제가 처리하는데 iOS는 시스템에서 발생하는 특정 상황에 맞게 앱의 상태를 변화시키고 제어한다.
예를 들어 애플뮤직을 실행하다가 메세지 앱으로 화면 전환을 해서 메세지를 작성해도 계속 음악이 흘러나온다. 이때 운영체제가 애플뮤직 앱의 상태를 변경시켜주는 것이다.

  • Not Running : 앱이 시작되지 않았거나 실행되었지만 시스템에 의해 종료된 상태
  • Active(활성) : 앱이 실행중이며, 이벤트를 받고 있는 상태
  • Inactive(비활성) : 앱이 현재 활성이지만, 사용자의 상호 작용을 받지 않는 상태(이벤트X)
  • Background(백그라운드) : 앱이 백그라운드에서 실행되고 있지만, 사용자와의 상호 작용이 없는 상태
  • Suspended(중단) : 앱이 백그라운드에 있지만 실행 중이 아닌 상태. 메모리가 부족한 상황이 오면 iOS 시스템은 포그라운드에 있는 앱의 여유 메모리 공간을 확보하기 위해 Suspended 상태에 있는 앱들을 특별한 알림 없이 정리한다.




📖 앱의 생명주기


그림과 같이 앱은 다음과 같은 순서로 실행되고, 실행 상태가 변화된다. 앱의 실행 상태가 변화할 때 그에 대응하는 앱 델리게이트에 정의된 특정 메소드를 호출한다.

  • application(_:willFinishLaunchingWithOptions:) : 앱이 구동되어 필요한 초기 실행 과정이 완료되기 직전에 호출
  • application(_:didFinishLaunchingWithOptions:) : 앱이 사용자에게 화면으로 표시되기 직전에 호출
  • applicationDidBecomeActive(_:) : 앱이 활성 상태로 전환된 직후에 호출
  • applicationDidEnterBackground(_:) : 앱이 백그라운드로 이동한 직후에 호출
  • applicationWillTerminate(_:) : 앱이 종료되기 직전에 호출


참고
https://developer.apple.com/documentation/uikit/uiapplicationdelegate

profile
🐣 iOS Developer

0개의 댓글