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

Xcode에서 프로젝트를 생성하면 main() 함수가 자동으로 만들어지며, 여기에는 앱이 실행될 때 처리해야할 내용이 작성되어 있다. (그래서 개발자가 딱히 신경쓸 필요가 없음!) iOS 앱에서 main()함수가 하는 일은 실행 시 시스템으로부터 전달받은 두 개의 인자값과 AppDelegate 클래스를 이용하여 UIApplicationMain( ) 함수를 호출하고, 그 결과로 UIApplication 객체를 반환한다.
이때 호출되는 UIApplicationMain()이 iOS앱의 엔트리 포인트이다. 이 함수는 앱의 핵심 객체를 생성하는 프로세스를 핸들링하고,스토리보드 파일로부터 앱의 유저 인터페이스를 읽어 들일뿐만 아니라 우리가 작성한 커스텀 코드를 호출해 줌으로써 앱 생성 초기에 필요한 설정을 구현할 수 있게 해 준다. 사실상 거의 앱 실행에 필요한 전반적인 것을 관리한다고 생각하면 된다. 즉, UIApplication 객체 == 앱 프로세스!
UlApplication 객체는 Info.plist 파일을 바탕으로 앱에 필요한 데이터와 객체를 로드한다.
AppDelegate는 UIApplication으로부터 위임받은 일부 권한을 이용하여 커스텀 코드와 상호작용하는 역할을 담당하고,이를 통해 우리가 필요한 코드를 구현할 수 있도록 도와준다. 이 메소드에 원하는 커스텀 코드를 작성해 두면 앱이 처음 시작될 때 해당 코드를 실행할 수 있다! 런치스크린 설정할때 이 메서드에 sleep()을 넣은 이유가 이거였다!!!!!!!
앱이 더 이상 사용되지 않는다면 시스템은 앱을 메모리에서 제거할려고 할 것이다. 이 때 AppDelegate 클래스의 applicationWillTerminate(_:) 메소드를 호출해 종료시 실행된다.
앱의 상태란? 앱이 실행되는 동안 변하는 모습?이라고 할 수 있다. (활성, 비활성 등등) 앱의 상태 변화는 운영체제가 처리하는데 iOS는 시스템에서 발생하는 특정 상황에 맞게 앱의 상태를 변화시키고 제어한다.
예를 들어 애플뮤직을 실행하다가 메세지 앱으로 화면 전환을 해서 메세지를 작성해도 계속 음악이 흘러나온다. 이때 운영체제가 애플뮤직 앱의 상태를 변경시켜주는 것이다.

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