我不明白如何在Cocoa中使用委托,但我知道它们是什么

时间:2010-04-10 02:00:29

标签: objective-c cocoa

像许多人一样,我对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];

4 个答案:

答案 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”的特定实例(拼写错误)应该是它的代表。