Обязанности делегатов и контроллеров в Cocoa Touch?
Я новичок в разработке на iPhone. Почти каждый образец проекта (а также шаблоны проектов по умолчанию) имеет один или несколько делегатов и контроллеров. Может кто-нибудь дать мне разбивку того, что делегаты несут ответственность за то, что должны делать контроллеры?
Ответы
Ответ 1
Самый простой способ, с помощью которого можно разделить эти два метода:
- Делегат - это протокол (интерфейс), который определяет методы, которые реализует объект для получения определенных сообщений от других объектов. Объекты делегатов чаще всего используются для получения асинхронных обратных вызовов, таких как ввод данных пользователя, ввод-вывод.
- Контроллер - это объект, который обычно содержит элементы пользовательского интерфейса (представления, элементы управления и т.д.) и данные, а также принимает и отправляет сообщения различным объектам внутри него. Во многих случаях контроллер является делегатом и может реализовывать несколько делегатских протоколов для приема событий из нескольких объектов.
Имейте в виду, что многие элементы и элементы пользовательского интерфейса позволяют передавать события обратно контроллеру, связывая их с методом IBAction в Interface Builder. Это очень удобно, поскольку для реализации делегатов не требуется дополнительный код. Однако некоторые другие API, такие как ABPeoplePickerNavigationController или NSURLConnection, не имеют визуализации в Interface Builder и поэтому должны использовать делегаты для обработки своих событий.
Ответ 2
Делегат - это некоторый объект, который реализует набор методов, которые зависит от вашего приложения или рамки, на которую вы ссылаетесь. Это средство реализации шаблона проектирования на основе делегаций, в котором ответственность за выполнение действия передается от некоторого источника корня заинтересованному третьему лицу. Например, UIApplication
имеет методы делегирования, которые предоставляют третьей стороне возможность выполнять операции в определенное время в течение жизненного цикла приложений. Это может быть хотя вехой на временной шкале, в которую вы можете внести свой вклад в историю.
Контроллер - совершенно другое животное и несет ответственность за то, что он контролирует. ViewController загружается с помощью управления представлениями - для загрузки их в память с диска, когда они необходимы, и выгружать их, когда они не являются. Они преобразуют контент из некоторого базового объекта модели в форму, которая может использоваться вашими объектами представления, загружать контент в вашу модель в памяти с диска или из Интернета и выгружать содержимое обратно на диск при сохранении и/или выходе.