Я обычно избегаю подхода к дизайну, подразумеваемого использованием Эндрю термина «сердце вашего приложения». Под этим я подразумеваю то, что, как мне кажется, вам следует избегать слишком большого количества вещей в одном месте - хороший дизайн программы обычно предполагает разделение функциональности по «проблемной области».
Объект делегата - это объект, который получает уведомление, когда объект, к которому он подключен, достигает определенных событий или состояний. В этом случае делегат приложения - это объект, который получает уведомления, когда объект UIApplication достигает определенных состояний. Во многих отношениях это специализированный паттерн «Наблюдатель один на один».
Это означает, что «проблемная область» для AppDelegate обрабатывает специальные состояния UIApplication. Наиболее важными из них являются:
- applicationDidFinishLaunching: - хорошо для обработки конфигурации и построения при запуске
- applicationWillTerminate: - хорошо для очистки в конце
Вы должны избегать добавления других функций в AppDelegate, так как они там на самом деле не принадлежат. Такая другая функциональность включает в себя:
- Данные документа - у вас должен быть одноэлементный менеджер документов (для приложений с несколькими документами) или одноэлементный документ (для приложений с одним документом)
- Контроллеры кнопок / таблиц / представлений, методы делегатов представлений или другая обработка представлений (за исключением построения представления верхнего уровня в applicationDidFinishLaunching :) - эта работа должна выполняться в соответствующих классах контроллеров представлений.
Многие люди помещают эти вещи в свой AppDelegate, потому что они ленивы или думают, что AppDelegate контролирует всю программу. Вам следует избегать централизации в вашем AppDelegate, так как он запутывает проблемные области в приложении и не масштабируется.
Ваш представитель приложения является сердцем вашего приложения. Это по сути ваш «программный контроллер».
Делегат приложения - это класс, который получает сообщения уровня приложения, включая сообщение applicationDidFinishLaunching, наиболее часто используемое для инициирования создания других представлений.
Хотя это не совсем похоже, вы можете думать об этом как о «main ()» вашей программы Cocoa.
источник
@Shivam, спасибо.
Из того, что я понимаю
appDelegate
, близко к тому, чтоApplication
есть в Android.viewDidLoad
,viewDidDisappear
Сравнимо с каким жизненным циклом Android. Каждое приложение имеет жизненный цикл, от запуска до прерывания от входящих вызовов до появления уведомлений. Если вам нужно, чтобы ваш код делал что-то особенное, когдаsystem
происходят эти события, вам нужно написать код для методов.В Android мы используем
onPause
,onDestroy
,onCreate
своего рода методы обратного вызова для обработки таких системных событий.источник
onPause
,onCreate
иonDestroy
методы Android больше похожи наviewDidDisappear
,viewDidLoad
методы жизненного цикла ИОСА Посмотреть контроллер. Если сравнивать, я бы сказал, чтоApplication
класс Android будет ближе кAppDelegate
iOS.Надеюсь, это поможет немного больше ...
У программистов, плохо знакомых с этим языком, всегда один и тот же вопрос - программа запускается из основного метода? Да, вы правы в этом случае; Приложения IOS также начинаются с основного метода.
Ваш основной класс вызывает следующую функцию:
UIApplicationMain запускает цикл запуска Cocoa Touch и инфраструктуру приложения, которая создает
UIApplication
объект. Наше приложение нуждается в контенте, поэтому для выполнения этой задачи target-c использует делегат. Вот почему мы называем это AppDelegate (выступать в качестве делегатаUIApplication
). Мы реализуем некоторые дополнительные методы этого делегата, и он ведет себя соответственно.источник