Что лучше всего описывает делегат приложения? Как это вписывается в общую концепцию? - PullRequest
16 голосов
/ 06 мая 2009

Я думаю, чтобы знать, что делает делегат приложения. У него есть несколько хороших методов, таких как -applicationDidFinishLaunching, которые будут вызываться после завершения запуска приложения и так далее. Но что это на самом деле? Это какой-то объект, созданный в функции UIApplicationMain?

И как работает, что каждый класс в моем приложении имеет доступ к этому объекту App Delegate? Есть ли в сети хороший график, который визуализирует эти отношения?

Ответы [ 2 ]

37 голосов
/ 06 мая 2009

В Какао делегат - это объект, к которому другой объект обращается с вопросами о поведении и сообщает об изменениях в его состоянии. Например, UITableViewDelegate отвечает за ответы на вопросы о том, как должен вести себя UITableView при выполнении выбора или переупорядочении строк. Это объект, который UITableView запрашивает, когда он хочет знать, какой высоты должна быть конкретная строка. В парадигме Model-View-Controller делегаты являются контроллерами, а имена многих делегатов заканчиваются на «Controller».

Имея риск заявить об очевидном, UIApplicationDelegate является делегатом для UIApplication. Эта связь немного более очевидна в Cocoa (Mac), чем в Cocoa Touch (iPhone), поскольку делегат NSApplication может более непосредственно контролировать поведение NSApplication (например, предотвращая завершение приложения). iPhone не дает большого контроля над UIApplication, поэтому в основном UIApplicationDelegate информируется об изменениях, а не об активном процессе принятия решений.

UIApplicationDelegate не всегда доступен везде в приложении. Одноэлементное приложение UIApplication ([UIApplication sharedApplication]), и с его помощью вы можете найти его делегата. Но это не означает, что для каждого объекта в приложении целесообразно напрямую общаться с делегатом приложения. В целом, я не рекомендую разработчикам разговаривать с делегатом приложения случайными объектами. Большинство проблем, которые решаются таким образом, лучше решать с помощью Singletons, NSNotification или других объектов делегатов.

Что касается его создания, то в Mac нет ничего волшебного в делегате приложения. В большинстве случаев это просто объект, созданный и подключенный NIB. На iPhone, однако, делегат приложения может быть немного волшебным, если создается UIApplicationMain (). Четвертый параметр - это NSString, указывающий класс делегата приложения, и UIApplicationMain () создаст его и установит в качестве делегата sharedApplication. Это позволяет вам установить делегата без NIB (что очень сложно для Mac). Если четвертый параметр для UIApplicationMain () равен nil (как в шаблонах Apple), то делегат создается и подключается основным NIB, как и главное окно.

3 голосов
/ 06 мая 2009

Объект создается таким образом;

Основная функция ищет основной кончик, установленный в info.plist. Перо имеет в качестве делегата приложения, который настроен на некоторый класс, который должен реализовывать UIApplicationDelegates и его необходимые методы. Затем делегат приложения загружает некоторый viewcontroller.

Он служит объектом обратного вызова в масштабе приложения для событий, влияющих на все приложение, таких как нехватка памяти и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...