Responding to the Launch of Your App
https://developer.apple.com/documentation/uikit/app_and_environment/responding_to_the_launch_of_your_app
https://velog.io/@panther222128/Responding-to-the-Lauch-of-Your-App
Using Responders and the Responder Chain to Handle Events
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/using_responders_and_the_responder_chain_to_handle_events
https://velog.io/@panther222128/Responder-Chain
https://developer.apple.com/documentation/uikit/uiresponder
"An abstract interface for responding to and handling events"
이벤트에 응답하고 이벤트를 다룰 수 있는 추상 인터페이스입니다.
@MainActor class UIResponder : NSObject
리스폰더 객체, 즉 UIResponder
의 인스턴스들은 UIKit
앱에서 이벤트를 다루는 근간을 이루고 있습니다. UIApplication
, UIViewController
, 모든 UIView
객체들 또한 리스폰더입니다. 이벤트가 발생하면 UIKit
이 이벤트를 앱의 리스폰더 객체들에게 보냅니다.
터치 이벤트, 모션 이벤트, 리모트 컨트롤 이벤트, 프레스 이벤트를 포함한 여러 가지 이벤트가 존재합니다. 이벤트의 특정 타입을 처리하려면 리스폰더는 그에 상응하는 메소드를 오버라이드해야 합니다. 예를 들어 터치 이벤트를 처리하려면 리스폰더는 touchesBegan(:with:)
, touchesMoved(
:with:)
, touchesEnded(:with:)
, touchesCancelled(
:with:)
메소드를 구현해야 합니다. 터치의 경우 리스폰더는 터치에 대한 변경을 추적하고 앱의 인터페이스를 적합하게 업데이트 하기 위해 UIKit
이 제공하는 이벤트 정보를 사용합니다.
이벤트를 다루는 것과 더불어 UIKit
리스폰더는 앱 내에서 처리되지 않은 이벤트를 보내는 것을 관리하기도 합니다. 어떤 리스폰더 이벤트를 처리하지 않는다면, 리스폰더 체인에 따라 다음 이벤트를 전달합니다. UIKit
은 리스폰더 체인을 동적으로 다룹니다. 사전에 정의된 규칙에 따라 어떤 객체가 다음 이벤트를 받아야 하는지 결정하면서 진행됩니다.
리스폰더는 UIEvent
객체를 프로세싱하기도 하지만, 입력 뷰를 통해 커스텀 입력 역시 받아들일 수 있습니다. 입력 뷰의 대표적인 예가 키보드 입력과 관련한 뷰입니다. 예를 들어 사용자가 UITextField
혹은 UITextView
객체를 탭하면, 뷰는 첫 번째 리스폰더가 되고 립력 뷰를 활성화시키며 이 입력 뷰가 키보드입니다. 유사한 모양으로 커스텀 입력 뷰를 만들 수도 있습니다.
리스폰더와 리스폰더 체인에 관련해 더 많은 정보가 필요하다면 아래 링크를 살펴보면 좋습니다.
https://developer.apple.com/documentation/uikit/#//apple_ref/doc/uid/TP40009541
https://developer.apple.com/documentation/uikit/uiapplication
"The centralized point of contorl and coordination for apps running in iOS."
iOS에서 작동하는 앱에 대한 컨트롤과 조정의 중심점입니다.
@MainActor class UIApplication : UIResponder
모든 iOS 앱은 정확히 하나의 UIApplication
인스턴스를 가집니다. (혹은 아주 드물게 UIApplication
의 서브클래스를 갖습니다.) 앱이 launch될 때, 시스템은 UIApplicationMain(::::)
함수를 호출합니다. 이와 같은 작업 중 이 함수는 shared
를 사용해 접근이 가능한 싱글턴 UIApplication
객체를 생성합니다.
앱의 application
객체는 사용자로부터 받는 이벤트의 시작 절차를 다루기 시작합니다. 이는 적절한 타깃 객체에게 액션 메시지를 보내는 것을 의미하며, 컨트롤 객체에 의해 수행됩니다. application
객체는 열려 있는 UIWindow
를 유지합니다.
UIApplication
클래스는 UIApplication Delegate
프로토콜을 준수하는 딜리게이트를 정의하고 있으며, 몇 가지 프로토콜 메소드를 실행해야 합니다. application
객체는 중요한 런타임 이벤트에 상응하는 반응이 있을 수 있도록 딜리게이트를 알려줘야 합니다. 예를 들어 앱이 launch되었다거나 메모리 부족 경고, 앱 종료와 같은 것들입니다.
앱들은 메일, 이미지 같은 리소스를 다룰 수 있습니다. 예를 들어 특정 앱이 open(_:options:completionHandler:)
메소드를 통해 이메일 URL에 대응하는 메일앱을 launch하고 메시지를 보여줄 수 있습니다.
이 클래스 내에 API들은 기기의 특정 움직임을 관리할 수 있도록 합니다. 아래와 같은 내용들이 대표적입니다.
앱이 포어그라운드 혹은 백그라운드에 진입할 때 시스템 노티피케이션에 응답합니다. 그리고 다른 중요한 시스템 관련 이벤트를 처리합니다.
https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
https://velog.io/@panther222128/App-Life-Cycle
앱의 데이터 구조를 초기화하고, 앱의 실행을 준비합니다. 그리고 시스템으로부터 모든 launch 타임 요청에 반응합니다.
https://developer.apple.com/documentation/uikit/app_and_environment/responding_to_the_launch_of_your_app
https://velog.io/@panther222128/Responding-to-the-Lauch-of-Your-App
앱의 여러 UI 인스턴스들을 동시에 관리하고, 리소스들을 UI의 적합한 인스턴스로 보냅니다.
https://developer.apple.com/documentation/uikit/app_and_environment/scenes
https://velog.io/@panther222128/Scenes
https://developer.apple.com/documentation/uikit/uiapplicationdelegate
"A set of methods to manage shared behaviors for your app."
앱에서 공유된 동작을 관리하기 위한 메소드의 집합입니다.
@MainActor protocol UIApplicationDelegate
앱의 딜리게이트 객체는 앱의 공유된 동작을 관리합니다. 앱 딜리게이트는 앱의 루트 객체이며, UIApplication
과 함께 시스템 상호작용을 관리합니다. UIApplication
객체처럼 UIKit
또한 앱 딜리게이트를 생성합니다. 이는 앱의 launch 주기 시작에서 수행됩니다.
앱 딜리게이트 객체는 다음을 수행합니다.
iOS 12와 그 이전 버전에서 앱에 대한 주요 생명주기를 관리하기 위해 앱 딜리게이트를 사용했을 것입니다. 구체적으로 앱이 포어그라운드 혹은 백그라운드로 진입할 때 앱의 상태를 업데이트하기 위해 앱 딜리게이트의 메소드를 사용했을 것입니다.
Preparing Your UI to Run in the Foreground
https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_foreground
Preparing Your UI to Run in the Background
https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background
Managing Your App's Life Cycle
https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
https://velog.io/@panther222128/App-Life-Cycle