UIApplicationMain(_ :_ :_ :_ :)
- 응용 프로그램 객체 및 응용 프로그램 대리자를 만들고 이벤트 주기를 설정합니다.
- iOS 앱이 시작하기 위한 핵심 메서드로, 앱이 실행되면 UIApplication객체와 Delegate객체를 만들고 info.plist에서 필요한 nib file을 로드하고 메인이벤트 루프를 실행시킵니다.
Declaration
func UIApplicationMain(_ argc: Int32,
_ argv: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>,
_ principalClassName: String?,
_ delegateClassName: String?) -> Int32
Parameters
argc
- argc의 개수, 일반적으로 main에 해당하는 매개변수
argv
- argument의 가변 목록, 일반적으로 main에 해당하는 매개변수
principalClassName
- UIApplication 클래스 또는 하위 클래스의 이름
- nil을 지정하면 UIApplication으로 가정합니다.
delegateClassName
- 응용 프로그램 대리자가 인스턴스화되는 클래스의 이름
- principalClassName이 UIApplication의 서브 클래스를 지정하는 경우, 서브 클래스가 delegate로 되고 하위 클래스의 인스턴스가 앱의 delegate 메시지를 받습니다.
- 앱의 메인 nib 파일에서 delegate 객체를 로드하는 경우, nil을 지정합니다.
Return Value
- 정수(Int)값으로 리턴 타입이 지정되어있지만, 절대 return 되지 않습니다.
- 사용자가 홈버튼을 눌러서, 앱 밖으로 나가면 앱은 백그라운드로 이동합니다.
Discussion
- application객체와 deleate객체를 만들고 설정합니다.- Info.plist 파일에 NSMainNibFile 키와 이 값에 대한 유효한 nib file 이름을 포함하여 load 해야 하는 main nib 파일이 있다면(지정한다면), 이 함수는 해당 nib파일을 로드합니다.
- 앱의 run loop를 포함하는 main event loop을 만들고 이벤트 처리를 시작합니다.
UIApplication
- 모든 iOS앱에는 하나의 UIApplicaion 인스턴스가 있습니다.
- 앱이 시작되면 시스템은 UIApplicationMain(_:_:_:_:) 함수를 호출하며, 이 함수는 싱글톤 UIApplication 객체를 만듭니다.
class UIApplication: UIResponder
UIApplication 역할
- 사용자 이벤트의 초기 라우팅 처리.
- 컨트롤 객체(UIControl 클래스의 인스턴스)에 의해 전달된 작업 메시지를 적절한 객체에 전달.
- open windows(UIWindow 객체) 목록을 유지하며, 이를 통해 앱의 UIView 객체를 검색
UIApplication 기능
- UIApplication 클래스는 UIApplicationDelegate 프로토콜을 준수하고, 프로토콜의 일부 메서드를 구현해야하는 delegate를 정의합니다.
- Application 객체는 delegate에게 앱 시작, 메모리 부족 경고 및 앱 종료와 같은 중요한 런타임 이벤트를 알려, 이벤트에 대응할 수 있는 기회를 알립니다.
- 앱은 openURL(_:) 메서드를 통해 이메일 또는 이미지 파일과 같은 리소스를 협력적으로 처리할 수 있습니다.
동작 수행
- UIApplication 객체를 사용해, 다음과 같은 동작을 수행할 수 있습니다.
기능 | 메서드 | |
1 | 들어오는 터치 이벤트를 일시적으로 중단 | beginIgnoringInteractionEvents() |
2 | 원격 알림 등록 | registerForRemoteNotifications() |
3 | UI 실행 취소 - 다시 실행 트리거 | applicationSupportsShakeToEdit |
4 | URL 체계를 처리하기 위해 등록된 앱이 설치되어 있는지 확인 | canOpenURL(_:) |
5 | 백그라운드에서 작업을 완료할 수 있도록 앱 실행 확장 | beginBackgroundTask(expirationHandler:) beginBackgroundTask(withName:expirationHandler:) |
6 | 로컬 알림 예약 및 취소 | scheduleLocalNotification(:) cancelLocalNotification(:) |
7 | 원격 제어 이벤트 수신 조정 | beginReceivingRemoteControlEvents() endReceivingRemoteControlEvents() |
8 | 앱 수준 상태 복원 작업 수행(상태 복원 동작 관리 작업 그룹의 방법) |
마무리
앱이 시작될 때, main.c에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가?
- UIApplication 싱글턴 객체
내용 출처
https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/UIApplicationMain.md
https://woongsios.tistory.com/209
'iOS > iOS' 카테고리의 다른 글
Instance 메서드와 class 메서드의 차이점을 설명하시오. (0) | 2022.04.20 |
---|---|
UIView 에서 Layer 객체는 무엇이고 어떤 역할을 담당하는지 설명하시오. (0) | 2022.04.18 |
Core Data (0) | 2022.04.14 |
Codable (0) | 2022.04.13 |
AnyObject (0) | 2022.04.11 |
댓글