像许多人一样,我对Objective-C和Cocoa编程很感兴趣。我从概念上知道代理是什么,但我不明白如何使用它们或何时使用它们。以下是一些示例代码:
#import "AppControler.h"
@implementation AppControler
-(id)init
{
[super init];
NSLog(@"init");
speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];
//
[speechSynth setDelegate:self];
voiceList = [[speechSynth availableVoices] retain];
return self;
}
我将AppControler设置为speechSynthasizer的委托。这意味着speechSynthasizer告诉了AppControler该怎么做。
但我不明白这一行:
[speechSynth setDelegate:self];
答案 0 :(得分:5)
self
是当前对象,因此[speechSynth setDelegate:self]
将speechSynth
对象的委托设置为当前对象,即您的AppControler
(原文如此)实例。
修改:除了显示的代码外,您的AppControler
应为您希望委托给它的邮件实施NSSpeechSynthesizerDelegate
protocol。
答案 1 :(得分:2)
这意味着speechSynth会将其所有委托消息发送到AppController实例
NSSpeechSynthesizer的实例将向他们的代表发送消息speechSynthesizer:didFinishSpeaking(确保AppController实现这一点,如果你需要知道发言结束的时间)
有关代表的更多常规信息,请查看Delegation
答案 2 :(得分:1)
“这意味着speechSynthasizer正在告诉AppControler该怎么做。”
真的,代表通常会这么说。
具有代理人的对象会询问代表是否应该做什么,或者告知代表他们将要做或已做的事情。委托知道该做什么,另一个对象知道如何做。
委托必须实现其他对象期望调用的方法。例如,UIApplication的委托通常实现applicationDidFinishLaunching:因为UIApplication知道如何启动但不知道之后要做什么。任何接受委托的类都将具有相关的协议或类别,用于定义委托可以实现的方法。
答案 3 :(得分:0)
这是告诉演讲的第十一个“AppControler”的特定实例(拼写错误)应该是它的代表。