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

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

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

4b9b3361

Ответ 1

Обычно я избегаю проектного подхода, подразумеваемого Эндрю, использующего термин "сердце вашего приложения". Что я имею в виду, так это то, что я думаю, что вам следует избегать слишком большого количества вещей в центральном месте - хороший дизайн программы обычно включает разделение функциональности по "области, вызывающей озабоченность".

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

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

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

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

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

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

Ответ 2

Ваш делегат приложения является сердцем вашего приложения. Это эффективно ваш "программный контроллер".

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

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

Ответ 3

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

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

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

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

Ответ 4

@Shivam, спасибо.

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

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