setDelegate объяснение - PullRequest
       16

setDelegate объяснение

4 голосов
/ 10 мая 2010

Привет, я новичок в разработке iphone, может кто-нибудь объяснить мне, почему используется setDelegate, где мы должны его использовать.

[request setDelegate:sender];

спасибо заранее.

Ответы [ 2 ]

6 голосов
/ 18 мая 2010

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

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

2 голосов
/ 22 марта 2012

Некоторые классы, например NSSpeechSynthesizer, включают поддержку делегатов. В отличие от протокола, неспособность предоставить метод делегата не вызывает ошибку: класс всегда предоставляет метод, но вместо этого вызывает ваш, если он существует.

Например, NSSpeechSynthesizer имеет метод

-(void) speechSynthesizer:(NSSpeechSynthesizer*)sender 
        didFinishSpeaking:(BOOL)complete;

Если вы предоставите идентично объявленный метод в классе Fred, он будет вызываться вместо собственного метода синтезатора, если вы ранее сделали в этом классе

speech = [[NSSpeechSynthesizer alloc] initWithVoice:@"com.apple.speech.synthesis.voice.Albert"];

[speech setDelegate:self];

Это будет работать, хотя компилятор выдаст предупреждение, если вы не объявили себя делегатом

@interface Fred : NSObject <NSSpeechSynthesizerDelegate>, in that 
{

. , .

(Этот пример адаптирован из программирования какао ... автором Hillegass).

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