본문 바로가기
🍎 iOS/UIKit

[UIKit] UIApplication

by hyebin (Helia) 2022. 3. 24.

UIApplication

iOS에서 실행되는 앱의 제어와 조정의 중심점

선언
@MainActor class UIApplication : UIResponder

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

앱이 시작되면 시스템은 UIApplicationMain(_: _: _: _:) 함수를 호출합니다.

이 함수는 UIApplication 객체의 싱글턴을 생성하는 작업을 합니다.

그다음 shared 클래스 메서드를 호출해 싱글턴 객체에 접근할 수 있습니다.

 

application 객체의 주요 역할은 사용자 이벤트로부터의 초기 라우팅을 처리하는 것입니다.

application 객체는 UIControl 클래스의 인스턴스인 control객체가 전달한 action 메시지를 target 객체에 전달합니다.

application 객체는 'open' 상태의 UIWindow 객체 리스트를 유지하며, 앱 내 UIView 객체들을 검색하는 데 사용합니다.

 

UIApplication 클래스는 UIApplicationDelegate 프로토콜을 준수하고 delegate를 정의합니다.

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

 

앱은 openURL(_:) 메서드를 통해서 이메일이나 이미지 파일과 같은 리소스를 공동으로 처리할 수 있습니다.

 

이 클래스의 API를 사용하면 기기별 동작을 관리할 수 있습니다.

UIApplication 객체를 사용하여 다음을 수행합니다.

  • 들어오는 터치 이벤트 일시 중단(beginIgnoringInteractionEvents()) 
    • 더 이상 사용되지 않음
  • 원격 알림 등록(registerForRemoteNotifications())
    • 푸시 알림 서비스를 통해 원격 알림을 수신하도록 등록
  • 실행 취소 UI 트리거(applicationSupportsShakeToEdit)
    • 장치를 흔들면 실행 취소- 다시 실행 사용자 인터페이스가 표시되는 여부를 결정하는 Bool 값
  • URL 스키마를 처리하도록 등록된 설치된 앱이 있는지 확인(canOpenURL(_:))
    • 앱이 URL 체계를 처리할 수 있는지 여부를 나타내는 Bool 값을 반환
  • 백그라운드에서 작업을 완료할 수 있도록 앱 실행 확장
    • beginBackgroundTask(expirationHandler:): 앱이 백그라운드로 전환되는 경우 계속되어야 하는 작업의 시작 표시
    • beginBackgroundTask(withName:expirationHandler:): 앱이 백그라운드로 전환되는 경우 계속되어야 하는 사용자 지정 이름으로 작업의 시작을 표시
  • 로컬 알림 예약과 취소
    • scheduleLocalNotification(_:) → 더이상 사용되지 않음
    • cancelLocalNotification(_:) → 더이상 사용되지 않음
  • 원격제어 이벤트의 수신 조정
    • beginReceivingRemoteControlEvents(): 원격 제어 이벤트 수신을 시작하도록 앱에 지시
    • endReceivingRemoteControlEvents(): 원격 제어 이벤트 수신을 중지하도록 앱에 지시
  • 서브 클래싱

 

서브 클래싱 노트

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

대신에 App delegate를 사용해서 시스템과 앱간의 상호작용을 관리합니다.

만약  앱이 시스템보다 들어오는 이벤트를 먼저 처리해야 한다면 커스텀 이벤트 또는 action 전송 메커니즘을 직접 구현할 수 있습니다.
이를 위해서 UIApplication을 서브클래싱하고 sendEvent(_:)sendAction(_:to:from:for:)까지도 오버라이드 할 수 있습니다.
  • sendEvent(_:): 앱의 적절한 응답자 객체에 이벤트 전달
  • sendAction(_:to:from:for:): 선택기로 식별된 작업 메세지를 지정된 대상으로 보냄
가로채는 모든 이벤트에 대해서 이벤트 처리를 한 후 super.sendEvent(_:)를 호출해서 시스템으로 전송하세요.
이벤트를 가로채는 것은 거의 필요하지 않으며 가능하다면 피해야 합니다.
반응형

'🍎 iOS > UIKit' 카테고리의 다른 글

[UIKit] UIView(3)  (0) 2022.03.30
[UIKit] UIView(2)  (0) 2022.03.28
[UIKit] UIView(1)  (0) 2022.03.25
[UIKit] 앱의 라이프 사이클  (0) 2022.03.22
UIKit  (0) 2022.03.21

댓글