ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AppDelegate ?
    iOS 2020. 4. 22. 13:42

    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를 정리해봐야겠어요!! 

    감사합니다.

    댓글

Designed by Tistory.