Что такое AppDelegate и как я могу знать, когда его использовать?

голоса
123

Я только начинаю работать на iPhone приложения. Как я знаю, когда я должен положить вещи в AppDelegate против пользовательского класса? Есть ли правила или любой тип аналогии с другим языком программирования, как Python или PHP, который использует AppDelegate как шаблон?

Задан 17/03/2009 в 00:00
источник пользователем
На других языках...                            


4 ответов

голоса
220

Я обычно избегать подхода к проектированию подразумеваемому с использованием Андреевского термина «сердце вашего приложения». То, что я имею в виду, что я думаю, что вы должны избегать комков слишком много вещей в одном месте - хороший дизайн программа обычно включает в себя разделение функциональности по «проблемной области».

Объект делегата является объектом, который получает уведомление, когда объект, к которому он подключен достигает определенные события или состояния. В этом случае приложение делегат является объектом, который получает уведомления, когда объект UIApplication достигает определенные состояния. Во многих отношениях это специализированный шаблон Observer один-к-одному.

Это означает, что «проблемная область» для AppDelegate обрабатывает особые состояния UIApplication. Наиболее важными из них являются:

  • applicationDidFinishLaunching: - хорошо для обработки на запуске конфигурации и конструкции
  • applicationWillTerminate: - хорошо для очистки в конце

Вы должны избегать других функций в AppDelegate, так как они на самом деле не принадлежат там. Такие другие функции включают в себя:

  • Данные документа - вы должны иметь менеджер документ синглтон (для нескольких приложений, документов) или документ синглтон (для применения отдельных документов)
  • Кнопка / таблица / просмотр диспетчеры, вид делегатую метода или обработки другого вида (для строительства зрения верхнего уровня в applicationDidFinishLaunching :), за исключением - эта работа должна быть в соответствующих классах вида контроллера.

Многие люди сваливать эти вещи в их AppDelegate, потому что они ленивы или они думают, что AppDelegate контролирует всю программу. Вы должны избегать централизации в вашем AppDelegate, поскольку она мутит проблемных областей в приложении и не масштабируется.

Ответил 17/03/2009 в 08:40
источник пользователем

голоса
22

Приложение Делегат является сердцем вашего приложения. Это эффективно ваш «Контроллер программы».

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

Хотя не совсем похоже вы могли бы думать о нем, как «основной ()» монотонность вашей какао программы.

Ответил 17/03/2009 в 00:14
источник пользователем

голоса
1

Надеюсь, это поможет немного больше ...

Программисты новые на этом языке всегда имеют один и тот же вопрос - это запустить программу из основного метода? Да, вы правы , в этом случае; IOS приложений также исходить из основного метода.
Ваш главный класс называет ниже функции:

 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

UIApplicationMain пинает запуск цикла и приложение инфраструктуру Cocoa Touch , который создает UIApplicationобъект. Наше приложение должно содержание так Objective-C использует делегат справиться с этим. Вот почему мы называем его AppDelegate (выступать в качестве делегата UIApplication). Мы реализуем некоторые из дополнительных методов этого делегата и ведет себя соответствующим образом .

Ответил 10/02/2016 в 10:44
источник пользователем

голоса
-1

@Shivam, спасибо.

Из того, что я понимаю , о appDelegate, близка к тому , что Applicationв Android. viewDidLoad, viewDidDisappearСравнимо с каким жизненным циклом Android. Каждое приложение имеет свой жизненный цикл, от запуска к перерывам из вызовов , поступающих, уведомлений , показывая вверх. Если вам нужен код , чтобы сделать что - то особенное , когда эти systemсобытия происходят , то вам необходимо написать код методов.

В Android мы используем onPause, onDestroy, onCreateсвоего рода методы обратного вызова для обработки таких системных событий.

Ответил 27/01/2017 в 18:01
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more