Некоторые классы, например 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).