일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- widget
- swift concurrency
- 운영체제
- 알고리즘
- 1일1알골
- SwiftUI
- Swift
- 네트워크
- 멋쟁이사자처럼
- cs
- TCA
- 웹
- spritekit
- 백준
- 위젯킷
- 리액트
- uikit
- 후기
- 영남대
- 문법
- 스위프트
- 대외활동
- dispatchqueue
- c++
- widgetkit
- 멋사
- 컴퓨터그래픽스
- composable architecture
- Protocol
- 스유
- Today
- Total
맛동산이
Swift) UIApplicationMain, UIApplication, App delegate, UIApplicationDelegate 본문
Swift) UIApplicationMain, UIApplication, App delegate, UIApplicationDelegate
진ddang 2023. 8. 31. 17:16이재성 씨의 깃허브, ios 면접 준비 질문에 있는 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? 에 대한 대답이다.
해당 내용은 app life cycle과 관련되어 있는 내용이다.
앱의 실행과정
UIApplicationMain()
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
역할
iOS앱이 실행되는 사이의 객체들을 조절하고 관리하는 객체이다.
- UIApplication 객체는 사용자 이벤트의 초기 라우팅을 처리함
- UIWindow 객체를 관리하고 이를 통해서 열린 창의 목록을 유지 관리함
- UIControl 객체에 의해 생성된 메세지를 적절한 타겟에 전달해줌
UIApplication은 UIApplicationDelegate의 delegate객체를 가지고 있어야하며 이 객체에게 앱 실행, 메모리 부족 경고, 앱 종료 등의 중요한 런타임 이벤트를 delegation 객체에게 전달해준다.
- 이를 위해서 UIApplication은 Responder이라는 프로토콜을 준수하고 있다.
UIApplicationDelegate
UIApplicationDelegate는 app의 동작을 수행 하는 메소드들이 모인 프로토콜이다.
App Delegate
- iOS 13이후로 app delegation은 scene delegation과 합쳐진다.
앞의 이야기를 하자면,
UIApplicationDelegate를 채택하는 AppDelegate를 가 이제 위의 UIApplicationMain에서 생성이 되고, 생성된 app delegate 객체가 UIApplication 객체에게 넘어간다.
이때 생성되는 App Delegate의 클래스 객체가 바로 app delegate이다.
사실상 app delegation 객체가 앱의 루트 객체이며, 시스템과 앱의 상호작용을 관리한다.
역할
- 앱의 중앙 데이터 구조 초기화
- 앱의 장면 구성
- 메모리 부족 경고, 다운로드 완료 알림 등 앱 외부에서 발생하는 알림에 응답
- 앱 자체를 대상으로 하며 앱의 장면, 보기 또는 보기 컨트롤러에만 국한되지 않는 이벤트에 응답합니다.
- Apple 푸시 알림 서비스 등 실행 시 필요한 서비스 등록
- app life cycle 처리
위 링크의 delegate에 명시된 메소드들을 보면,
앱초기화, 장면구성, 생명주기, 환경변화대응, 앱상태 복원관리, 백그라운드 재생, 원격 알림, 푸시알림, 시리킷, 헬스킷 등 다양한 시스템과의 앱 상호작용을 관장하는 메소드들이 있다.
window
window는 app delegate가 가지고 있는 프로퍼티 이며, 모든 view의 최상위 관리 객체
모든 View를 담고 있으며, 사용자 인터페이스의 배경을 제공하고, 이벤트를 처리한다.
정리하자면,
- UIApplicationMain은 UIApplication 과 App delegate 인스턴스를 생성한다.
- app delegate 객체는 UIApplication 내부에 전달된다.
- UIApplication 객체는 delegate객체를 통해서 앱과 시스템의 상호작용을 하게 된다.
- iOS 13부터는 scene delegate로 합쳐져 있다.
- delegate객체는 window를 가지고 있으며, window는 모든 UIView의 최상위 관리 객체이다.
'앱 > Swift' 카테고리의 다른 글
Swift) 비동기 프로그래밍에 대한 이해 (0) | 2023.08.31 |
---|---|
Swift) Xcode, app thinning이란? (0) | 2023.08.31 |
Swift) Dispatch Group이란, 사용하는 방법 (0) | 2023.08.28 |
Swift) Swift concurrency가 나온 배경에 대해서, thread와 GCD의 한계점 (2) | 2023.08.28 |
Swift) rethrows란 (0) | 2023.08.28 |