Я обычно избегаю подхода к дизайну, подразумеваемого тем, что Эндрю использует термин «сердце вашего приложения». Под этим я подразумеваю то, что я думаю, что вам следует избегать слишком большого количества вещей в одном месте - хороший дизайн программы обычно предполагает разделение функциональности на «проблемную область».
Объект делегата - это объект, который получает уведомление, когда объект, к которому он подключен, достигает определенных событий или состояний. В этом случае делегат приложения - это объект, который получает уведомления, когда объект UIApplication достигает определенных состояний. Во многих отношениях это специализированный паттерн Observer один на один.
Это означает, что «проблемная область» для AppDelegate обрабатывает специальные состояния UIApplication. Наиболее важными из них являются:
- applicationDidFinishLaunching: - хорошо для обработки конфигурации и построения при запуске
- applicationWillTerminate: - хорошо для очистки в конце
Вам следует избегать добавления других функций в AppDelegate, поскольку они там на самом деле не принадлежат. Такие другие функции включают в себя:
- Данные документа - у вас должен быть одноэлементный менеджер документов (для приложений с несколькими документами) или одноэлементный документ (для приложений с одним документом)
- Контроллеры кнопок / таблиц / представлений, методы делегатов представлений или другая обработка представлений (за исключением создания представления верхнего уровня в applicationDidFinishLaunching :) - эта работа должна выполняться в соответствующих классах контроллеров представлений.
Многие люди помещают эти вещи в свой AppDelegate, потому что они ленивы или думают, что AppDelegate контролирует всю программу. Вы должны избегать централизации в вашем AppDelegate, так как он запутывает проблемные области в приложении и не масштабируется.