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