맛동산이

Swift) UIApplicationMain, UIApplication, App delegate, UIApplicationDelegate 본문

앱/Swift

Swift) UIApplicationMain, UIApplication, App delegate, UIApplicationDelegate

진ddang 2023. 8. 31. 17:16

이재성 씨의 깃허브, ios 면접 준비 질문에 있는 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? 에 대한 대답이다.


해당 내용은 app life cycle과 관련되어 있는 내용이다.

앱의 실행과정

Untitled.png

Untitled.png

UIApplicationMain()

Untitled.png

uiapplicationMain함수는 application object와 delegate 객체를 생성하고, event cycle을 셋업하기 위한 함수이다.

4개의 파라미터를 받는데 다음과 같다.

  • argc : argv의 개수

  • argv : argument의 변수 목록

    int main( int argc, char* argv[])의 원형에서 따온 argv, argv이다.

  • principalClassName : UIApplication의 클래스 이름이거나 서브클래스의 이름

  • delegateClassName : 앱델리게이션의 클래스 이름

UIApplicationMain()은 앱의 UIApplication 과 UIdelegation객체를 생성하고 앱의 초기 셋팅값(info.plist)을 불러오고 앱을 Run loop에 올려 놓으며 함수를 진행시킵니다.

UIApplication

Untitled.png

역할

iOS앱이 실행되는 사이의 객체들을 조절하고 관리하는 객체이다.

  • UIApplication 객체는 사용자 이벤트의 초기 라우팅을 처리함
  • UIWindow 객체를 관리하고 이를 통해서 열린 창의 목록을 유지 관리함
  • UIControl 객체에 의해 생성된 메세지를 적절한 타겟에 전달해줌

UIApplication은 UIApplicationDelegate의 delegate객체를 가지고 있어야하며 이 객체에게 앱 실행, 메모리 부족 경고, 앱 종료 등의 중요한 런타임 이벤트를 delegation 객체에게 전달해준다.

  • 이를 위해서 UIApplication은 Responder이라는 프로토콜을 준수하고 있다.

UIApplicationDelegate

Untitled.png

UIApplicationDelegate는 app의 동작을 수행 하는 메소드들이 모인 프로토콜이다.

App Delegate

  • iOS 13이후로 app delegation은 scene delegation과 합쳐진다.

Untitled.png

Untitled.png

앞의 이야기를 하자면,

UIApplicationDelegate를 채택하는 AppDelegate를 가 이제 위의 UIApplicationMain에서 생성이 되고, 생성된 app delegate 객체가 UIApplication 객체에게 넘어간다.

이때 생성되는 App Delegate의 클래스 객체가 바로 app delegate이다.

사실상 app delegation 객체가 앱의 루트 객체이며, 시스템과 앱의 상호작용을 관리한다.

역할

  • 앱의 중앙 데이터 구조 초기화
  • 앱의 장면 구성
  • 메모리 부족 경고, 다운로드 완료 알림 등 앱 외부에서 발생하는 알림에 응답
  • 앱 자체를 대상으로 하며 앱의 장면, 보기 또는 보기 컨트롤러에만 국한되지 않는 이벤트에 응답합니다.
  • Apple 푸시 알림 서비스 등 실행 시 필요한 서비스 등록
  • app life cycle 처리

bookmark

위 링크의 delegate에 명시된 메소드들을 보면,

앱초기화, 장면구성, 생명주기, 환경변화대응, 앱상태 복원관리, 백그라운드 재생, 원격 알림, 푸시알림, 시리킷, 헬스킷 등 다양한 시스템과의 앱 상호작용을 관장하는 메소드들이 있다.

window

window는 app delegate가 가지고 있는 프로퍼티 이며, 모든 view의 최상위 관리 객체

모든 View를 담고 있으며, 사용자 인터페이스의 배경을 제공하고, 이벤트를 처리한다.

정리하자면,

  1. UIApplicationMain은 UIApplication 과 App delegate 인스턴스를 생성한다.
  2. app delegate 객체는 UIApplication 내부에 전달된다.
  3. UIApplication 객체는 delegate객체를 통해서 앱과 시스템의 상호작용을 하게 된다.
  4. iOS 13부터는 scene delegate로 합쳐져 있다.
  5. delegate객체는 window를 가지고 있으며, window는 모든 UIView의 최상위 관리 객체이다.
반응형