티스토리 뷰

iOS

iOS ) AppDelegate.swift의 역할

Zedd0202 2017. 9. 14. 17:50
반응형

프로젝트를 만들면..반드시..있는..파일.......

바로..AppDelegate.swift....

문서를 하나 읽고있는데, 여기서 AppDelegate.swift에 대해서 잘 설명해주었더라구요 ㅎㅎ

저도 두리뭉실하게만 알고있었는데..:-)


사실 이 글은 위 문서에 나와있는 글을 그냥 번역..?한 거에요. 

만약 iOS초보시라면..! 이 문서를 따라서 앱을 하나 만들어보는 게 정말 공부가 많이 될 것 같아요!! (영어공부는 덤 ^^)

(추가로 ㅎㅎ 제가 iOS나 Swift공부하면서 참고하면 좋은 사이트들 정리해놓 글이 있어요! 위 문서도 추가해놨으니 참고하세요XD)





AppDelegate.swift의 역할




AppDelegate.swift라는 소스파일은 두가지 역할을 합니다. 



●  AppDelegate클래스를 정의합니다. 



이야기를 하기 전에 app delegate라는 용어를 하나 아셔야하는데요,

(app delegate는 AppDelegate와는 다릅니다!)

app delegate는 위에서 말한 AppDelegate클래스의 인스턴스인데요, 이 app delegate는 우리의 앱의 객체에요.

app delegate는 앱의 상태에 따라 응답하는 콘텐츠가 그려지는 창(window)을 만듭니다. 


즉, AppDelegate.swift가 있으므로 AppDelegate클래스가 만들어지고, 이 AppDelegate클래스에 인스턴스인 app delegate가 우리의 앱 내용이 그려질 창(window)를 만드는 것이죠. 


이게 AppDelegate.swift의 두가지 역할 중 하나입니다. 









  AppDelegate.swift는 entry point와, 앱의 입력 이벤트를 전달하는 run loop를 생성합니다. 



이 작업은  UIApplicationMain속성에 의해 수행되며, 이 속성은 파일의 맨 위에 나타납니다. 



UIApplicationMain 속성을 사용하는 것은 UIApplicationMain함수를 호출하고 AppDelegate클래스의 이름을 delegate 클래스에 전달하는 것과 동일합니다.


이에 대한 응답으로, 시스템은 응용프로그램 객체(application object)  생성합니다. 응용프로그램 객체(application object)는 app의 life cycle을 담당합니다. 

또한 시스템은 AppDelegate클래스의 인스턴스를 생성하고 이를 응용프로그램 객체(application object)에 할당합니다. 

마지막으로, 시스템은 앱을 실행합니다. 


여기까지가 AppDelegate.swift가 하는 일이에요! ㅎㅎ 

AppDelegate클래스의 부가설명이 조금 더 있네요.



AppDelegate클래스는 새 프로젝트를 만들 때 마다 자동으로 생성됩니다. 매우 이상한 일을 하지 않는 한 Xcode에서 제공하는 이 클래스(AppDelegate)를 사용하여 앱을 초기화하고 app-level이벤트에 응답해야 합니다.

AppDelegate클래스는 UIApplicationDelegate 프로토콜을 채택합니다. 



이 프로토콜(UIApplicationDelegate)은 앱을 세팅하고, 앱 상태 변화에 응답하며 다른 app-level이벤트를 처리하는 데 사용하는 여러가지 방법을 정의합니다. 



AppDelegate클래스에는 프로퍼티 하나가 포함되어 있습니다. : window 



이 프로퍼티는 앱의 창(window)에 대한 참조를 저장합니다. 

이 창(window)은 앱의 view계층구조의 루트를 나타냅니다. 이는 앱 콘텐츠가 모두 그려지는 곳입니다. 

window프로퍼티는 Optional 프로퍼티입니다.(UIWindow?로 되어있죠?)

즉, 어떨때는 아무런 값 도 가질 수 없다(nil)는 것을 의미합니다. 


AppDelegate클래서는 몇몇 delegate메소드들이 구현되어 있습니다. 

  1. func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
  2. func applicationWillResignActive(_ application: UIApplication)
  3. func applicationDidEnterBackground(_ application: UIApplication)
  4. func applicationWillEnterForeground(_ application: UIApplication)
  5. func applicationDidBecomeActive(_ application: UIApplication)
  6. func applicationWillTerminate(_ application: UIApplication)


이 메소드들을 사용하면, 응용프로그램 객체(application object)가 app delegate와 통신할 수 있습니다.

앱상태가 전환되는 동안(ex : 앱 실행, 백그라운드로 전환 및 앱 종료) 응용프로그램 객체는 위 메소드들 중 해당하는 delegate 메소드를 호출하여 앱이 응답할 수 있는 기회를 제공합니다. 

이러한 메소드가 올바른 시간에 호출되도록 하려고 특별한 작업을 수행 할 필요는 없습니다. 응용프로그램 객체가 해당작업을 알아서 처리합니다. 


위의 Delegate메소드들은 기본동작이 있습니다. 구현을 비워두거나, AppDelegate클래스에서 지운다면 해당 메소드가 호출될 때마다 기본동작을 얻습니다.(이 부분이 저는 이해가 안가네요...) 또는 메소드를 호출 할 때 실행되는  사용자 지정 동작을 정의 할 수 있습니다. 



후..어떠신가요? 제가 잘 번역을 한건지 모르겠네요 ㅎㅎ..

도움이 되었으면 좋겠어요~.~




반응형

'iOS' 카테고리의 다른 글

iOS ) Frame과 Bounds의 차이 (2/2)  (2) 2017.09.21
iOS 11 달라진 점!!  (2) 2017.09.20
iOS ) 기기별 화면 미리보기  (0) 2017.09.11
iOS ) Frame과 Bounds의 차이 (1/2)  (26) 2017.09.08
iOS ) CGRect와 CGSize의 차이, 그리고 CGPoint  (8) 2017.09.05