본문 바로가기
iOS/iOS

앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체?

by 황민우 2022. 4. 15.

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

 

GitHub - jwonyLee/TIL: Today I Learned

Today I Learned. Contribute to jwonyLee/TIL development by creating an account on GitHub.

github.com

https://woongsios.tistory.com/209

 

[개발자 문서읽기] UIApplicationMain(::::)

개인적으로 공부하며 정리하는 블로그 입니다. 오류나 부족한 부분이 있을 수 있으니 감안하여 봐주시고 아낌없는 조언 감사드립니다 :D UIApplicationMain(::::) 는 iOS 앱이 시작하기 위한 핵심 메소

woongsios.tistory.com

 

'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

댓글