-
AppDelegate ?iOS 2020. 4. 22. 13:42728x90
AppDelegate.swift
프로젝트를 생성하면 자동으로 생성되는 source file 입니다. 지금은 SceneDelegate도 추가 되었지만 우선 AppDelegate가 무엇이고 어떤 역할을 하는지, 해왔는지 알아야 SceneDelegate가 왜 등장했는지 알 수 있겠죠? 오늘은 AppDelegate에 대해 알아볼까 합니다.
오늘의 목표는 아래 그림을 박스들을 이해하는 것입니다.
AppDelegate.swift source file은 두 가지 주요 기능을 합니다.
-
AppDelegate class를 정의합니다. 만들어진 app delegate(application object)는 앱의 contents가 그려지고, 앱의 상태 변화에 대한 반응을 처리하는 window를 만듭니다.
-
entry point 와 run loop 를 만듭니다. 이 작업은 파일 상단의 UIApplicationMain attributes(@UIApplicationMain) 에 의해 실행됩니다.
@UIApplicationMain을 사용하는 건 UIApplicationMain 함수에 "AppDelegate" 라는 클래스 이름을 delegate 로 전달하는 것과 동일하다. 그러면 시스템은 application object를 생성한다.
entry point: 프로그램이나 코드에 진입하는 지점 ( 컨트롤이 시작되는 점)?
Where control enters a program or piece of code.
run loop: 이벤트 처리 루프
An event processing loop that you use to schedule work and coordinate the receipt of incoming events in your app.
application object: 앱 라이프 사이클을 관리하고 앱 내부에서 상태가 변화할 때마다 delegate 나 app delegate와 소통중간 정리,
@UIApplicationMain (UIApplicationMain에 AppDelegate 전달 )
--> entry point, run loop 생성, application object 생성
--> application object에 의해 app life cycle 이 관리되고 상태변화 처리가 가능해짐.
이제 이 두 박스 이해 되시나요?
AppDelegate class는 프로젝트를 만들면 자동으로 생성되는데, 특별한 경우가 아니면 가급적 생성된 class를 사용하는게 좋습니다. AppDelegate class 는 UIApplicationDelegate protocol을 채택합니다. UIApplicationDelegate protocol은 앱 설정에 사용되는 메서드의 수를 정의하고, 앱 상태 변화에 따른 반응을 처리하고 app 레벨의 다른 이벤트를 처리합니다.
AppDelegate 는 window 라는 하나의 property를 포함하고 있습니다.
이 window는 app window의 reference를 저장합니다. 이 window는 앱의 root 이며, 여기서 앱의 모든 contents가 그려집니다.
window가 optional 타입인 것을 보면, 경우에 따라 화면이 비어있을 수도 있음을 나타냅니다.나머지 두 박스도 이해 되시리라 생각합니다.
추가로,
AppDelegate 는 몇 가지 delegate methods 를 갖고 있는데요, 이를 통해 앱의 상태변화에 다른 처리를 해줄 수 있습니다.// 앱이 처음 시작될 때 실행 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool // 앱이 active -> inactive 상태로 변할 때 실행 func applicationWillResignActive(_ application: UIApplication) // 앱이 background 상태로 들어가고 나면 실행 func applicationDidEnterBackground(_ application: UIApplication) // 앱이 background -> foreground 로 변할 때 실행 func applicationWillEnterForeground(_ application: UIApplication) // 앱이 active 상태가 되고나면 실행 func applicationDidBecomeActive(_ application: UIApplication) // 앱이 종료될 때 실행 func applicationWillTerminate(_ application: UIApplication)
이상 간단하게 AppDelegate를 살펴봤습니다. 당연하게 여기고 두리뭉술하게 넘어가고 있었는데 생각보다 모르고 있던 숨은 내용들이 많이 있었네요. 한번 정리하고 나니까 조금 감이 잡히는 것 같아요
공식문서를 참고했습니다. 보다 자세한 내용은 직접 확인해보시면 좋을 것 같아요 :)
다음은 SceneDelegate를 정리해봐야겠어요!!
감사합니다.
'iOS' 카테고리의 다른 글
ImageView scaleAspectFit 하고 정렬해주기 (3) 2020.04.23 collectionView, tableView reloadData 완료 시점 (3) 2020.04.22 Swipe Gesture 와 Pan Gesture 함께 쓰기, Gesture Recognizer simultaneously (0) 2020.04.10 info.plist 파일 옮기기 (0) 2020.04.04 TextView 라인 수 구하기 (0) 2020.03.16 -