2010-04-10 46 views
2

與許多人一樣,我對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];

回答

5

self是當前對象,因此[speechSynth setDelegate:self]speechSynth對象的代理設置爲當前對象,即AppControler(原文如此)實例。

編輯:除了顯示的代碼,您的AppControler應該實現NSSpeechSynthesizerDelegate protocol您想要委託給它的消息。

+0

如果您熟悉Java或C#等其他面嚮對象語言,Objective-C中的「self」與其中的「this」意思相同。 – Arkku 2010-04-10 02:13:46

+0

「so [speechSynth setDelegate:self]將speechSynth對象的委託設置爲當前對象,即您的AppControler(sic)實例。」 所以speechSynth對象正在返回到AppController? – lampShade 2010-04-10 03:15:53

+1

lampShade:不。AppController已經有了'speechSynth'對象,因爲您在前面的語句中給出了該對象(將其分配給'speechSynth'實例變量)。 'setDelegate:'消息除了設置合成器的代理外什麼也不做。 – 2010-04-10 12:13:16

0

這就是告訴speechSynth說:「AppControler」(這是拼寫錯誤)的這種特定情況下應該是其代表。

2

這意味着speechSynth將發送它的所有的委託消息的AppController

NSSpeechSynthesizer的

實例的實例將派代表的消息speechSynthesizer:didFinishSpeaking(確保AppController中實現這一點,如果你需要知道什麼時候該說話飾面)

有關委託的更多綜合信息檢查出Delegation

1

「這意味着該speechSynthasizer告訴興田AppControler做什麼。」

真的,代表通常會說。

帶有委託的對象將詢問委託人或應該如何執行某項操作,或向委託人通知要執行或已完成的操作。代表知道該怎麼做,而另一個對象知道如何去做。

委託必須實現其他對象期望調用的方法。例如,UIApplication的委託通常實現applicationDidFinishLaunching:因爲UIApplication知道如何啓動,但不知道如何執行。任何接受委託的類都會有一個相關的協議或類別來定義委託可能實現的方法。

相關問題