Подтвердить что ты не робот

Что лучше описывает делегат приложения? Как он вписывается во всю концепцию?

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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