Я только начинаю работать над iPhone-приложениями. Как узнать, когда я должен помещать вещи в AppDelegate по сравнению с пользовательским классом? Есть ли правило или любой тип аналогии с другим языком программирования, например Python или PHP, который использует шаблон AppDelegate?
Что такое AppDelegate и как узнать, когда его использовать?
Ответ 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
методы обратного вызова для обработки таких системных событий.