UIApplicationMain 을 이해하고자 문서를 번역, 정리한 내용입니다(출처)
application 객체와 application delegate를 만들고 이벤트 사이클을 설정하는 역할을 한다.
func UIApplicationMain(_ argc: Int32,
_ argv: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>,
_ principalClassName: String?,
_ delegateClassName: String?) -> Int32
argc
인자 argv의 갯수. 이것은 일반적으로 main에 일치하는 매개변수다.
argv
인자의 변수 리스트. 이것은 일반적으로 main에 일치하는 매개변수다.
principalClassName
UIApplication 클래스 혹은 서브클래스의 이름이다. 만약 nil인 경우, UIApplication이라 가정된다.
delegateClassName
인스턴스화 되는 application delegate 클래스의 이름.
만약 principalClassName이 UIApplication의 서브클래스를 지정하면, 서브클래스를 델리게이트로서 지정하는 거여서 서브클래스 인스턴스는 application-delegate 메시지를 받는다. 만약 델리게이트 객체를 애플리케이션의 main nib 파일로부터 로드하는 경우에는 nil을 지정해야 한다.
리턴 타입이 정수로 지정되어있지만 이 함수는 리턴하지 않는다. 유저가 홈 버튼을 눌러 iOS앱을 종료하면 백그라운드로 이동한다.
이 함수는 주 클래스에서 application object를 인스턴스화하고 지정된 클래스에서 델리게이트(있는 경우)를 인스턴스화하고 application object의 델리게이트를 설정한다. 또한 application의 실행 루프를 포함해 메인 이벤트 루프를 설정하고 이벤트 처리를 시작한다. 만약 어플리케이션의 info.plist 파일이 메인 nib 파일이 로드되도록 NSMainNibFile 키와 이 값에 대한 유효한 nib 파일 이름을 포함해 구체화한다면 이 함수는 해당 nib 파일을 로드한다.
선언된 리턴 유형에도 불구하고 이 함수는 절대 리턴하지 않는다