ios

7. iOS UIApplication 공부하기

코코넛딩 2023. 11. 21. 15:06

챗지피티와 구글 번역기를 사용해서 공부한 내용이니 틀린점이 있다면 댓글 달아주세요!

 

UIApplication이란?

  1. iOS에서 실행되는 앱을 위한 중앙 집중식 제어 및 조정 지점이다.
  2. UIApplication이 들어오는 사용자 이벤트의 초기 라우팅을 처리한다.
  3. 즉, 사용자가 앱내에서 터치 이벤트나 다른 상호 작용을 발생 시킬 때, 이러한 이벤트의 초기 처리는 UIApplication에서 시작된다.
  4. UIApplication은 Control objects에서 전달된 action messages를 적절한 타겟 객체로 디스패치합니다.
  5. Control objects는 주로 UIControl 클래스의 인스턴스를 의미한다. 사용자가 화면에서 버튼을 탭하는 등의 제어 요소를 조작할때 해당 이벤트가 UIControl에서 발생하고, 그 이벤트를 UIApplication이 적절한 대상 객체로 보낸다.
  6. UIApplication은 열린 window의 목록을 유지한다.
  7. 열린 window의 목록은 UIWindow 객체들의 목록이고 UIWindow는 화면에 표시되는 창을 나타낸다.
  8. UIApplication은 이 창 목록을 유지하고, 앱의 모든 UIView 객체를 검색할 때 사용할 수 있습니다.

 

AppDelegate와의 관련성

  1. UIApplication의 delegate가 UIApplicationDelegate이다.
  2. AppDelegate는 UIApplicationDelegate를 implement한다.
  3. 그렇다면 UIApplication == AppDelegate 인가? 정답은 "UIApplication.shared == AppDelegate의 인스턴스" 이다.
    1. 앱이 시작되는 순간, main에서 UIApplicationMain(_:_:_:)이 application 객체(UIApplication.shared)를 만들고, delegate도 만든다.
    2. AppDelegate 클래스 앞에 어노테이션으로 붙은 @UIApplicationMain으로 UIApplicationMain(_:_:_:)를 호출한다.
    3. UIApplicationMain(_:_:_:)의 마지막 파라미터는 delgateClassName이다. AppDelegate에서 UIApplicationMain(_:_:_:)를 호출했으니, delegateClassName에 "AppDelegate라는 이름을 전달한 것과 동일하다.
    4. 그리고, AppDelegate 클래스의 인스턴스를 만들고, 이 인스턴스를 위에서 만든 application객체 (UIApplication.shared)에 할당한다.
    5. 즉 지금 appDelegate와 application 객체가 연결된것
    6. 그리고 application객체가 delegate메서드인 application:didFinishLaunchingWithOptions:를 호출한다.
    7. 지금 AppDelegate가 UIApplicationDelegate를 채택하고 준수하고 있으니 여기에 있는 application:didFinishLaunchingWithOptions:가 호출되고 앱이 실행된다.
    8. AppDelegate에 명시적으로 UIApplicationDelegate를 위임하지 않아도, 시스템이 프토토콜 메서드를 호출하여 라이프사이클 이벤트에 대응할 수 있다.

 

참고한 블로그

https://zeddios.tistory.com/539