Кто такой “делегат” в разработке iPhone Objective C? [дубликат]

Этот вопрос уже имеет ответ здесь:

Кто такой "делегат" в разработке iPhone Objective C?

70
задан Irfan 31 March 2014 в 20:00
поделиться

4 ответа

См. это обсуждение

Делегат позволяет одному объекту посылать сообщения другому объекту, когда происходит событие. Например, если вы загружаете данные с веб-сайта асинхронно, используя класс NSURLConnection. NSURLConnection имеет три общих делегата:

 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
 - (void)connectionDidFinishLoading:(NSURLConnection *)connection
 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

Один или несколько из этих делегатов будут вызваны, когда NSURLConnection столкнется с неудачей, успешно завершится или получит ответ от веб-сайта, соответственно.

56
ответ дан 24 November 2019 в 13:19
поделиться

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

Хорошим примером является UIAlertView . Вы создаете объект UIAlertView для отображения окна короткого сообщения для пользователей, возможно, предоставляя им выбор с помощью двух кнопок, таких как «ОК» и «Отмена». UIAlertView нуждается в способе перезвонить вам, но у него нет информации о том, какой объект перезвонить и какой метод вызывать.

Чтобы решить эту проблему, вы можете отправить свой указатель self на UIAlertView в качестве объекта делегата, и взамен вы соглашаетесь (объявив UIAlertViewDelegate в файл заголовка вашего объекта) для реализации некоторых методов, которые может вызывать UIAlertView , например alertView: clickedButtonAtIndex: .

Прочтите этот пост , чтобы получить быстрое высокоуровневое введение в шаблон проектирования делегата и другие методы обратного вызова .

Ссылки:

79
ответ дан 24 November 2019 в 13:19
поделиться

Я думаю, что эта статья в Википедии описывает это лучше всего: http://en.wikipedia.org/wiki/Delegation_pattern

Это "просто "реализация шаблона проектирования и очень распространена в Objective-C

5
ответ дан 24 November 2019 в 13:19
поделиться

Делегаты - это шаблон проектирования; нет специального синтаксиса или языковой поддержки.

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

21
ответ дан 24 November 2019 в 13:19
поделиться