ios
7. iOS UIApplication 공부하기
코코넛딩
2023. 11. 21. 15:06
챗지피티와 구글 번역기를 사용해서 공부한 내용이니 틀린점이 있다면 댓글 달아주세요!
UIApplication이란?
- iOS에서 실행되는 앱을 위한 중앙 집중식 제어 및 조정 지점이다.
- UIApplication이 들어오는 사용자 이벤트의 초기 라우팅을 처리한다.
- 즉, 사용자가 앱내에서 터치 이벤트나 다른 상호 작용을 발생 시킬 때, 이러한 이벤트의 초기 처리는 UIApplication에서 시작된다.
- UIApplication은 Control objects에서 전달된 action messages를 적절한 타겟 객체로 디스패치합니다.
- Control objects는 주로 UIControl 클래스의 인스턴스를 의미한다. 사용자가 화면에서 버튼을 탭하는 등의 제어 요소를 조작할때 해당 이벤트가 UIControl에서 발생하고, 그 이벤트를 UIApplication이 적절한 대상 객체로 보낸다.
- UIApplication은 열린 window의 목록을 유지한다.
- 열린 window의 목록은 UIWindow 객체들의 목록이고 UIWindow는 화면에 표시되는 창을 나타낸다.
- UIApplication은 이 창 목록을 유지하고, 앱의 모든 UIView 객체를 검색할 때 사용할 수 있습니다.
AppDelegate와의 관련성
- UIApplication의 delegate가 UIApplicationDelegate이다.
- AppDelegate는 UIApplicationDelegate를 implement한다.
- 그렇다면 UIApplication == AppDelegate 인가? 정답은 "UIApplication.shared == AppDelegate의 인스턴스" 이다.
- 앱이 시작되는 순간, main에서 UIApplicationMain(_:_:_:)이 application 객체(UIApplication.shared)를 만들고, delegate도 만든다.
- AppDelegate 클래스 앞에 어노테이션으로 붙은 @UIApplicationMain으로 UIApplicationMain(_:_:_:)를 호출한다.
- UIApplicationMain(_:_:_:)의 마지막 파라미터는 delgateClassName이다. AppDelegate에서 UIApplicationMain(_:_:_:)를 호출했으니, delegateClassName에 "AppDelegate라는 이름을 전달한 것과 동일하다.
- 그리고, AppDelegate 클래스의 인스턴스를 만들고, 이 인스턴스를 위에서 만든 application객체 (UIApplication.shared)에 할당한다.
- 즉 지금 appDelegate와 application 객체가 연결된것
- 그리고 application객체가 delegate메서드인 application:didFinishLaunchingWithOptions:를 호출한다.
- 지금 AppDelegate가 UIApplicationDelegate를 채택하고 준수하고 있으니 여기에 있는 application:didFinishLaunchingWithOptions:가 호출되고 앱이 실행된다.
- AppDelegate에 명시적으로 UIApplicationDelegate를 위임하지 않아도, 시스템이 프토토콜 메서드를 호출하여 라이프사이클 이벤트에 대응할 수 있다.
참고한 블로그