티스토리 뷰
프로젝트를 만들면..반드시..있는..파일.......
바로..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메소드들이 구현되어 있습니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
func applicationWillResignActive(_ application: UIApplication)
func applicationDidEnterBackground(_ application: UIApplication)
func applicationWillEnterForeground(_ application: UIApplication)
func applicationDidBecomeActive(_ application: UIApplication)
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 |
- iOS delegate
- fastlane
- swift3
- FLUTTER
- 제이슨 파싱
- SwiftUI
- Combine
- swift sort
- swift array
- swift tutorial
- IOS
- Accessibility
- np-complete
- WWDC
- 회고
- Swift
- 스위프트 문법
- 피아노
- np-hard
- WKWebView
- github
- swift 공부
- 스위프트
- ios 13
- Xcode
- Git
- actor
- swift delegate
- UIBezierPath
- WidgetKit
- Total
- Today
- Yesterday