-
[개발자 문서읽기] UIApplicationMain(::::)iOS 2021. 1. 16. 16:43728x90
개인적으로 공부하며 정리하는 블로그 입니다.
오류나 부족한 부분이 있을 수 있으니 감안하여 봐주시고 아낌없는 조언 감사드립니다 :DUIApplicationMain(::::) 는 iOS 앱이 시작하기 위한 핵심 메소드 입니다. 말 그대로 앱이 되면 UIApplication 객체와 Delegate 객체를 만들고 info.plist에서 필요한 nib file을 로드하고 메인 이벤트 루프를 실행시킵니다.
swift 5.3 부터는 @main , 그 이전엔 @UIApplication 이라는 attribute를 사용하게 되는데요, 앱이 처음 실행되면 시스템은 이 attribute를 찾아서 UIApplicationMain(::::)를 호출하고 앱을 실행합니다. 따라서 이 attribute가 없다면 아래와 같이 시작 지점을 찾지 못해 컴파일 에러가 발생합니다 :)
참고할만한 그림을 가져와봤는데요. 좀 더 자세히 살펴보죠.
아래와 같은 플로우로 앱이 시작되는데 ,
앱이 실행되면(1) @main이나 @UIApplication을 찾아서 UIApplicationMain()을 실행시키게 됩니다. 그럼 그림의 2, 3, 4, 5, 6 등의 작업이 수행되는거랍니다 :)대강 흐름이 잡히셨다면 문서도 제대로 읽어봐야겠죠? :)
공부하며 번역한 내용입니다.
오역과 의역이 있을 수 있습니다. 정확한 내용은 원문을 참고해주세요 :)Creates the application object and the application delegate and sets up the event cycle.
application 객체와 application delegate를 생성하고 event cycle을 setup합니다.Declaration
func UIApplicationMain(_ argc: Int32, _ argv: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>, _ principalClassName: String?, _ delegateClassName: String?) -> Int32)
Parameters
- argc : argv의 개수. 대게 main에 해당하는 매개변수입니다.
- argv : argument의 변수 목록. 대게 main에 해당하는 매개변수입니다.
- prinsipalClassName : UIApplication클래스 또는 하위 클래스의 이름입니다. nil을 지정하면, UIApplication으로 가정합니다.
- delegateClassName : application delegate가 인스턴스화 되는 클래스 이름입니다. 만약 principalClassName이 UIApplication의 하위클래스를 지정하는 경우, 하위 클래스가 delegate로 되고 하위클래스 인스턴스가 앱의 delegate 메세지를 받습니다. 앱의 메인 nib파일에서 delegate 객체를 로드하는 경우에는 nil을 지정합니다.
Return Value
Int 리턴타입으로 쓰여있지만, 절대 return 되지 않습니다. 사용자가 홈버튼을 눌러서 앱을 밖으로 나가면 앱은 백그라운드로 이동합니다.
Discussion
application 객체와 delegate 객체를 만들고 설정합니다. Info.plist 파일에 NSMainNibFile 키와 이 값에 대한 유효한 nib file 이름을 포함하여 load해야 하는 main nib 파일이 있다면 있다면 load합니다. 앱의 run loop를 포함하는 main event loop 를 만들고 이벤트 처리를 시작합니다.
return 타입이 정의되어 있지만 return 하지 않습니다.
읽어주셔서 감사합니다!
'iOS' 카테고리의 다른 글
Intrinsic Content Size, Content Hugging, Content Compression Resistance (0) 2021.01.24 GCD, Dispatch (0) 2021.01.19 [개발자 문서읽기] Responding to the Launch of Your App (0) 2021.01.16 [개발자 문서읽기] UIApplication (0) 2021.01.16 앱에서 너무 많은 메모리를 사용하면 어떻게 될까? 어떻게 확인할까? (0) 2021.01.15