2010-05-10 52 views
4

嗨,我是iphone開發的新手,任何人都可以解釋我爲什麼使用setDelegate,我們應該在哪裏使用它。setDelegate的解釋

[request setDelegate:sender]; 

在此先感謝。

回答

6

代表只是一種設計模式;沒有特殊的語法或語言支持。

委託只是另一個對象在發生某些事情時發送消息的對象,以便委託可以處理原始對象不適用的應用程序特定的細節。這是一種無需子類自定義行爲的方式。

2

某些類(例如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的Cocoa Programming ...)。