Application Delegate를 가장 잘 설명하는 것은 무엇입니까?전체 컨셉에 어떻게 들어맞나요?
-
06-07-2019 - |
문제
App Delegate가 무엇을 하는지 알 것 같습니다.다음과 같은 좋은 방법이 있습니다. -applicationDidFinishLaunching
앱 실행이 완료되면 호출됩니다.그런데 그게 실제로 뭐죠?어떤 개체가 인스턴스화되어 있습니까? UIApplicationMain
기능?
그리고 내 앱의 모든 클래스가 해당 App Delegate 개체에 액세스할 수 있도록 하려면 어떻게 작동하나요?이러한 관계를 시각화하는 좋은 그래프가 인터넷에 있습니까?
해결책
Cocoa에서 대리자는 동작에 대한 질문을 다른 객체에 맡기고 해당 상태의 변화에 대해 알려주는 객체입니다.예를 들어 UITableViewDelegate는 선택이 이루어지거나 행이 재정렬될 때 UITableView가 어떻게 작동해야 하는지에 대한 질문에 대답하는 역할을 담당합니다.UITableView가 특정 행의 높이를 알고 싶을 때 묻는 개체입니다.모델-뷰-컨트롤러 패러다임에서 대리자는 컨트롤러이며 많은 대리자의 이름은 "컨트롤러"로 끝납니다.
명백하게 언급할 위험이 있지만, UIApplicationDelegate는 UIApplication에 대한 위임자입니다.NSApplication 대리자는 NSApplication의 동작을 더 직접적으로 제어할 수 있기 때문에(예를 들어 애플리케이션이 종료되는 것을 방지함) Cocoa Touch(iPhone)보다 Cocoa(Mac)에서 관계가 좀 더 분명합니다.iPhone은 UIApplication에 대한 많은 제어를 허용하지 않으므로 대부분 UIApplicationDelegate는 적극적인 의사 결정 프로세스를 갖기보다는 변경 사항에 대한 정보를 받습니다.
UIApplicationDelegate는 앱의 모든 곳에서 엄격하게 사용할 수 있는 것은 아닙니다.싱글톤 UIApplication은 ([UIApplication sharedApplication])이며 이를 통해 해당 대리자를 찾을 수 있습니다.하지만 이것이 앱의 모든 개체가 앱 대리자와 직접 통신하는 것이 적절하다는 의미는 아닙니다.일반적으로 개발자가 임의의 개체가 앱 위임자와 통신하는 것을 권장하지 않습니다.이러한 방식으로 해결되는 대부분의 문제는 Singleton, NSNotification 또는 기타 대리자 개체를 통해 더 잘 해결됩니다.
생성과 관련하여 Mac에서는 앱 대리자에 대해 마법 같은 것이 없습니다.대부분의 경우 NIB에 의해 인스턴스화되고 연결되는 객체일 뿐입니다.그러나 iPhone에서는 UIApplicationMain()에 의해 인스턴스화되면 앱 위임이 약간 마법처럼 느껴질 수 있습니다.네 번째 매개변수는 앱 대리자의 클래스를 나타내는 NSString이며, UIApplicationMain()은 하나를 생성하고 이를 sharedApplication의 대리자로 설정합니다.이를 통해 NIB 없이 대리자를 설정할 수 있습니다(Mac에서는 매우 어렵습니다).UIApplicationMain()의 네 번째 매개변수가 nil인 경우(Apple 템플릿과 마찬가지로) 기본 창과 마찬가지로 기본 NIB에 의해 위임이 생성되고 연결됩니다.
다른 팁
대상은 이런 방식으로 인스턴스화됩니다.
메인 기능은 info.plist에있는 메인 펜촉을 찾습니다. NIB에는 앱 대의원이 있으며 일부 클래스로 설정되어 UIAPplicationDelegates와 필요한 방법을 구현해야합니다. 그런 다음 앱 대의원은 일부 ViewController를로드합니다.
낮은 메모리 등과 같은 전체 응용 프로그램에 영향을 미치는 이벤트에 대한 응용 프로그램 광고 콜백 객체 역할을합니다.