Как и многие другие разработчики, новые для Cocoa, я борюсь с концепцией делегата и контроллера. Я получаю основы, но меня беспокоит одна вещь. Практически каждое объяснение говорит, что «обычно» или «в простых случаях» (которые являются единственными, которые они приводят в качестве примеров). Контроллер и делегат имеют тенденцию быть одним и тем же объектом. Это приводит к вопросу: когда вы хотите разделить контроллер и делегат для одного и того же объекта интерфейса?Отдельный делегат и контроллер
ответ
Два общий случая при использовании отдельного класса для нужен ваш делегата является
- Когда вам нужно выполнить несвязанные действия в ответ на то же делегат сообщение или
- Когда вы хотели бы поделиться логика делегата среди нескольких представлений или контроллеров.
Примером первой ситуации может быть страница с двумя несвязанными таблицами. Каждому UITableView
понадобится собственный делегат, поэтому использование контроллера в качестве делегата потребует уродливого оператора if
в каждом методе делегата; определение и использование отдельных делегатов явно предпочтительнее в этом случае.
Примером второй ситуации может быть группа похожих страниц, которые показывают данные БД из таблиц аналогичной структуры. Сами страницы достаточно разнородны, поэтому вы не можете полностью использовать контроллер во всей его полноте. Если вы решите поставить делегата в контроллер, большая часть логики источника данных в виде таблицы будет идентичной. Вы можете поместить код в общую реализацию делегата и каждый контроллер создаст экземпляр этого делегата с параметрами конфигурации, специфичными для таблицы, связанной с этим контроллером.
Следует иметь в виду, что при использовании другого объекта помимо контроллера в качестве вашего делегата: контроллер должен сохранять/поддерживать сильную ссылку на делегата, поскольку представление будет поддерживать только слабую/назначающую ссылку на него. См. property "assign" and "retain" for delegate для получения дополнительной информации.
- 1. Делегат iPhone & контроллер dealloc?
- 2. Swift; делегат встроенный контроллер просмотра и родительский
- 3. Отдельный маршрутизатор и контроллер в koa
- 4. Open контроллер от приложения делегат
- 5. Xcode приложение делегат каждого контроллер представления
- 6. Установить делегат как существующий контроллер просмотра
- 7. Делегат посылает значение назад и толкает контроллер pop view
- 8. Угловые js, когда создавать отдельный контроллер
- 9. Отдельный контроллер AngularJS для просмотра деталей?
- 10. с помощью компонента или использовать отдельный контроллер
- 11. использовать загрузочную модальность, не делая отдельный контроллер
- 12. отдельный логический контроллер и завод логика в угловом
- 13. Как использовать отдельный контроллер и шаблон в текущем режиме?
- 14. разница между - initWithRequest: делегат: и + connectionWithRequest: делегат
- 15. Делегат-подпись/общий делегат?
- 16. Событие C# и делегат
- 17. STI, делегат и становится
- 18. делегат добавлять и удалять
- 19. Единство и делегат
- 20. EventHandler и Делегат недоразумение
- 21. Делегат и нить вопрос
- 22. NSNetService делегат и ARC
- 23. NSObject ModalView и делегат
- 24. Делегат и событие
- 25. делегат и события
- 26. UITableView DataSource и делегат
- 27. Необъявленный делегат и shouldStartLoadWithRequest
- 28. Наблюдаемый делегат и run_once
- 29. annotationView делегат и MKAnnotation
- 30. Потерять указатель на делегат во время перехода через навигационный контроллер