UIApplication 알아보기

 기본 개념

UIApplication은 UIResponder와 마찬가지로 class입니다.

iOS에서 실행되는 앱을 제어 및 조정하는 중앙 지점입니다.

모든 iOS 앱에는 UIApplication 인스턴스가 하나만 존재합니다.

앱이 실행되면 @main 속성은 UIApplication 싱글톤 객체를 생성합니다.

즉, 앱을 실행하면 @main 속성은 shared app instance를 만든다고 보시면됩니다.

UIApplicationMain(_:_:_:_:)

@main 속성은 UIApplicationMain(_:_:_:_:) 메서드를 호출합니다.

UIApplicationMain(_:_:_:_:) 메서드는 application 객체와 application delegate를 생성합니다.

application 객체는 사용자 이벤트의 초기 라우팅을 처리합니다.

UIApplication 클래스는 UIApplicationDelegate 프로토콜을 준수합니다.

application 객체는 delegate에게 중요한 런타임 이벤트를 알리고 이에 응답할 기회를 제공합니다.

App Delegate

대부분 앱은 UIApplication을 서브클래싱할 필요가 없습니다.

대신 app delegate를 활용하여 시스템과 앱 사이의 상호작용을 관리할 수 있습니다.

앱에 들어오는 이벤트를 시스템이 처리하기 전에 처리해야하는 경우에는 UIApplication을 서브클래싱합니다.

그리고 sendEvent(_:) 또는 sendAction(_:to:from:for:) 메서드를 override합니다.

필요한 이벤트를 처리한 후, [super sendEvent: event]를 호출하여 시스템에 이벤트를 다시 전달합니다.

애플에선 이러한 이벤트 인터셉트를 권장하지 않습니다.

앱의 실행

@main 속성을 통해  UIApplicationMain(_:_:_:_:) 메서드를 호출합니다.

UIApplicationMain(_:_:_:_:) 메서드의 마지막 파라미터에는 delegateClassName이 전달됩니다.

AppDelegate에서 호출했기 때문에, 해당 메서드에 AppDelegate가 전달됩니다.

AppDelegate클래스의 인스턴스를 만들고, 위 과정에서 생성된 application 객체에 할당합니다.

여기까지 살펴보면 appDelegate와 application 객체가 연결된 것입니다.

그리고 application 객체는 application:didFinishLaunchingWithOptions:를 호출합니다.

AppDelegate가 UIApplicationDelegate를 채택하고 준수하고 있습니다.

그렇기 때문에 AppDelegate에서 application:didFinishLaunchingWithOptions: 가 호출됩니다.

앱이 실행됩니다.

댓글

이 블로그의 인기 게시물

UIResponder 알아보기

AppDelegate.swift 알아보기