- This topic has 3개 답변, 2명 참여, and was last updated 4 years, 8 months 전에 by 야곰.
-
글쓴이글
-
-
delma참가자
- 글작성 : 2
- 답글작성 : 4
앱 라이프 사이클에 대해 공부하려다
UIApplication이 중요한 애인 것 같은데 너무 궁금하고 잘 모르겠어서 공식 문서를 참고하며 공부해봤습니다!
특히 아래 서머리가 제가 이해한대로 정리해본건데, 읽어보시고 틀린 부분 있다면 피드백 부탁드립니다!UIApplication을 이해하고자 문서를 번역, 정리한 내용입니다.
UIApplication
iOS 앱을 구동하기 위한 조정과 중앙 집중식 제어를 담당하는 곳
Overview
모든 iOS 앱에는 딱 하나의(exactly one instance) UIApplication 인스턴스가 존재한다.(혹은 아주 드물게 UIApplication의 서브클래스가 있다) 앱이 시작될 때, 시스템은
UIApplicationMain
메소드를 호출한다. 이 함수는 싱글톤 UIApplication 객체를 생성한다.
그 후에sharedApplication
클래스 메소드를 호출해 그 객체(UIApplication 객체?)에 접근할 수 있다.
앱 애플리케이션 객체의 중요한 역할은 사용자 이벤트 초기 라우팅을 처리하는 것이다. 제어 오브젝트(UIControl 클래스의 인스턴스)가 적절한 타겟 오브젝트로 전달한 액션 메시지를 전달한다.
애플리케이션 객체는 열린 창 목록(UIWindow의 객체)을 유지하고 이를 통해 앱의 UIView 객체를 회수할 수 있다.
UIApplication 클래스는UIApplicationDelegate
프로토콜을 따르는 델리게이트를 정의하고 몇 프로토콜의 메소드를 구현한다. 이 어플리케이션 객체는 중요한 런타임 이벤트(예를들어 앱이 시작됐다거나, 메모리 부족 경고, 앱 종료)를 델리게이트에 알려 적절하게 대응할 수 있는 기회를 제공한다
이 클래스의 API를 따르면 디바이스의 구체적인 행동을 관리할 수 있다.- 터치 이벤트 일시 중지 (beginIgnoringInteractionEvents)
- 원격 알림 등록 (registerForRemoteNotifications)
- undo-redo UI 트리거 (applicationSupportsShakeToEdit)
- URL scheme을 다루도록 설치된 앱이 등록되었는지 확인(canOpenURL:)
- 백그라운드에서 작업을 완료할 수 있도록 앱 실행을 확장(beginBackgroundTaskWithExpirationHandler:, beginBackgroundTaskWithName:expirationHandler:)
- 로컬 알림 스케줄링, 취소 (scheduleLocalNotification:, cancelLocalNotification:)
- 원격 제어 이벤트 수신 조정(beginReceivingRemoteControlEvents, endReceivingRemoteControlEvents)
- app-level 상태 복원 작업 (methods in the Managing the State Restoration Behavior task group)
Subclassing Notes
대부분의 앱은 UIApplication을 서브클래싱 할 필요가 없다. 대신 앱 델리게이트를 통해 시스템과 앱 사이의 상호작용을 관리하면 된다.
만약 아주 드문 경우에서 앱이 시스템보다 먼저 들어오는 이벤트를 다뤄야 한다면, 커스텀 이벤트를 구현하거나 작업 전달 메커니즘을 구현할 수 있다.
이렇게 하려면UIApplication
과sendEvent:
,sendAction:to:from:forEvent:
메소드를 오버라이드 해야한다.
그리고 가로채는 모든 이벤트에 대해 처리한 후, 다시 시스템에 전달해야 한다.
이벤트를 가로채는 건 거의 필요하지 않고 가능한한 피해야 한다.
Summary
앱 시작시 시스템이
UIApplicationMain
메소드 호출
-> 호출되는 함수가UIApplication
인스턴스를 만드는데, 얘는 앱에 딱 하나만 존재
-> 사용자의 터치 등이 시스템에 의해 이벤트로 생성되는데, 이 이벤트를UIApplication
이 받아서UIContrl
객체에 전달
->UIControl
객체에 의해 이벤트 메시지(액션 메시지)가 적절한 대상에게 전달됨
그리고UIApplicatin
은UIApplicationDelegate
프로토콜을 채택해 중요한 런타임 이벤트(앱 시작,종료,메모리 부족 등)를 델리게이트가 처리하게 함.2020-03-10 오후 9:34 #2665 -
-
delma참가자
- 글작성 : 2
- 답글작성 : 4
읽어주셔서 감사합니다! 먼저
UIApplicationMain 메서드를 호출하는 코드는 어디에 있나요? 혹은 어디에서 볼 수 있나요?
라는 질문에 답변 하겠습니다
오늘 AppDelegate.swift 파일에 대해 찾아봤는데 마침 거기서 질문에 대한 답을 찾을 수 있었어요 ㅎㅎ \n
프로젝트를 생성하면 반드시 AppDelegate.swift 파일이 있는데 거기에는 AppDelegate 클래스가 정의되어있습니다.!
상단에 보면@UIApplicationMain
이라고 볼 수 있는데, 그렇게 속성을 사용하는 것이UIApplicationMain
메소드를 호출하는 것과 같다고 합니다!
그 이후에 위 글에서 정리한 것처럼 UIApplication 인스턴스가 생성되고 앱을 시작할 준비를 하는 것 같습니다.!2020-03-11 오후 7:40 #2711
-
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.