【发布时间】:2010-05-10 09:15:26
【问题描述】:
您好,我是 iphone 开发新手,谁能解释一下为什么要使用 setDelegate,我们应该在哪里使用它。
[request setDelegate:sender];
提前致谢。
【问题讨论】:
您好,我是 iphone 开发新手,谁能解释一下为什么要使用 setDelegate,我们应该在哪里使用它。
[request setDelegate:sender];
提前致谢。
【问题讨论】:
委托只是一种设计模式;没有特殊的语法或语言支持。
委托只是当某些事情发生时另一个对象向其发送消息的对象,因此委托可以处理原始对象未设计用于的特定于应用程序的细节。这是一种无需子类化即可自定义行为的方式。
【讨论】:
某些类(例如 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
{
。 . .
(此示例改编自 Cocoa Programming... by Hillegass)。
【讨论】: