-
[개발자 문서읽기] UIApplicationiOS 2021. 1. 16. 11:40728x90
공부하며 번역한 내용입니다.
오역과 의역이 있을 수 있습니다. 정확한 내용은 원문을 참고해주세요 :): iOS에서 실행되는 앱을 위한 중앙 집중식 제어 및 조정점
class UIApplication : UIResponder
Overview
모든 iOS앱은 반드시 하나의 UIApplication instance를 갖고 있습니다. (아주 드물게 subclass가 있을 수 있습니다.) 앱이 시작할 때 시스템은 UIApplicationMain(::::) 를 호출합니다. 이 함수는 shared로 접근할 수 있는 싱글턴 UIApplication 객체를 만듭니다.
application 객체는 들어오는 사용자 이벤트의 초기 라우팅을 처리합니다. control 객체들에 의해 전달된 액션 메세지들을 적절한 객체들에게 전달합니다. application은 열려있는 windows 목록을 유지합니다. 이를 통해서 UIView 객체들을 순회할 수 있습니다.
UIApplication 클래스는 UIApplication Delegate 프로토콜을 처리하는 delegate를 정의합니다. application은 앱 시작, 메모리 워닝, 앱 종료 같은 중요 런타임 이벤트를 delegate에 전달합니다.
앱들은 open(_:options:completionHandler:) 메소드를 통해서 다른 앱과 협력하여 email이나 image 파일같은 리소스를 처리할 수 있습니다. 예를 들어, 한 앱이 email URL과 함께 이 메소드를 호출하면 메일 앱이 실행되서 메세지를 보여줄 수 있습니다.
이 클래스의 API들을 사용해서 디바이스 별로(device-specific) 동작을 관리할 수 있습니다. 다음과 같이 사용하세요.
(deprecated된 메소드는 제외했습니다.)
- 원격 알림 등록 ( registerForRemoteNotifications() )
- UI undo-redo 트리거 ( applicationSupportsShakeToEdit )
- URL Scheme을 처리하기 위해 등록된 앱이 설치되어 있는지 확인합니다 ( canOpenURL(_:) )
- 백그라운드에서 작업을 완료할 수 있도록 앱 실행 확장 ( beginBackgroundTask(expirationHandler:) and beginBackgroundTask(withName:expirationHandler:) )
- local notification 스케쥴 및 취소 (
scheduleLocalNotification(:) and cancelLocalNotification(:))는 deprecated 되었으니 UNUserNotificationCenter를 사용해야합니다. ) - remote-control 이벤트 수신 조정 ( beginReceivingRemoteControlEvents() and endReceivingRemoteControlEvents() )
- 앱 수준 상태 복원 작업 처리 ( Managing the State Restoration Behavior task group의 메소드들 )
Subclassing Notes
대부분의 앱은 UIApplication subclass가 필요하지 않습니다. 대신 시스템과 앱 사이의 상호작용은 app delegate를 사용하세요.
만약 반드시 시스템 보다 먼저 들어오는 이벤트를 처리해야 한다면 (아주 드문 상황) custom event 나 action dispatching 메커니즘을 구현할 수 있습니다. 이를 수행하려면 UIApplication subclass를 만들고 sendEvent(:) 와 sendAction(:to:from:for:) 를 override하세요. 가로챈 이벤트를 다 처리하고 시스템이 다시 처리할 수 있도록 시스템을 호출해주세요.
super.sendEvent(event)
이벤트를 가로채는 건 아주 특수한 경우에만 사용됩니다. 가능하면 하지마세요.
감사합니다.
'iOS' 카테고리의 다른 글
[개발자 문서읽기] UIApplicationMain(::::) (0) 2021.01.16 [개발자 문서읽기] Responding to the Launch of Your App (0) 2021.01.16 앱에서 너무 많은 메모리를 사용하면 어떻게 될까? 어떻게 확인할까? (0) 2021.01.15 [개발자 문서읽기] UIView - 1 (0) 2021.01.13 Frame Bounds + center? transform? (0) 2021.01.08