Обязанности делегатов и контролеров в Cocoa Touch? - PullRequest
13 голосов
/ 21 ноября 2008

Я новичок в разработке на iPhone. Почти каждый пример проекта (а также шаблоны проектов по умолчанию) имеет одного или нескольких делегатов и контроллеров. Может ли кто-нибудь дать мне представление о том, за что ответственны делегаты и что должны делать контроллеры?

Ответы [ 2 ]

11 голосов
/ 21 ноября 2008

Самый простой способ, которым я могу представить различие между ними:

  • Делегат - это протокол (интерфейс), который определяет методы, которые объект реализует для получения определенных сообщений от других объектов. Объекты делегатов чаще всего используются для получения асинхронных обратных вызовов, таких как пользовательский ввод, ввод / вывод.
  • Контроллер - это объект, который обычно содержит элементы пользовательского интерфейса (представления, элементы управления и т. Д.) И данные, а также принимает и отправляет сообщения различным объектам в нем. Во многих случаях контроллер является делегатом и может реализовывать несколько протоколов делегатов для получения событий от нескольких объектов.

Имейте в виду, что многие элементы пользовательского интерфейса и элементы управления позволяют передавать события обратно в контроллер, связывая их с методом IBAction в Интерфейсном Разработчике. Это очень удобно, так как не требует дополнительного кода для реализации делегатов. Однако некоторые другие API, такие как ABPeoplePickerNavigationController или NSURLConnection, не имеют визуализации в Интерфейсном Разработчике и поэтому должны использовать делегаты для обработки своих событий.

4 голосов
/ 22 ноября 2008

Делегат - это некоторый объект, который реализует набор методов, от которых зависит функционирование вашего приложения или среды, с которой вы связываетесь. Это средство реализации шаблона проектирования на основе делегирования, в котором ответственность за выполнение действия передается от некоторого корневого источника заинтересованной третьей стороне. Например, UIApplication имеет делегат методов , которые предоставляют третьей стороне возможность выполнять операции в определенные моменты времени в течение срока службы приложений. Это может быть вехой на временной шкале, в которую вы можете внести свой вклад в историю.

Контроллер - это совершенно другое животное, которое отвечает за контроль. ViewController отвечает за управление представлениями - за загрузку их в память с диска, когда они необходимы, и за разгрузку их, когда они не нужны. Они преобразуют контент из некоторого базового объекта модели в форму, которая может использоваться вашими объектами представления, загружают контент в вашу модель в памяти с диска или из Интернета и сбрасывают содержимое обратно на диск при сохранении и / или выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...