2012-02-21 28 views
0

本質上講我問的是,什麼是代表,而且究竟如何我使用一個?究竟如何我使用中有一個委託類

什麼是代表邏輯的流程?我需要解釋得很好,所以對於我在這個網站上的許多谷歌搜索和搜索已經揭示了它們的用途,但並不真正如何使用它們。

我有,在有代表的一類,你可以調用一個函數請求的委託作爲參數。我應該做什麼,在我的班級中構建一個重複的委託,將它們傳遞並鏈接起來?愚蠢的人一些真正的基本解釋將不勝感激!

謝謝!

+0

退房討論, http://stackoverflow.com/questions/2534094/what-is-a-delegate-in-objective-cs-iphone-development – Avi 2012-02-21 18:16:19

回答

0

基本上代表是被說「耦合」與協議是很像,除了一個事實,即協議可指定您不必實現可選的方法Java或C#中的接口ID類型的變量。

所以爲了使用一個類時會委託實現了這樣的協議:

.h file: 

MyClass <TheProtocol> 

.m file 

- (void)theMethodToImplement 
{ 
//The implementation 
} 

之後具有委託變量的類只是有,通常可設定這樣的:

theDelegateClass.delegate = self; 

在此之後,「委託類」可能呼籲其他類中實現的方法是這樣的:

[delegate theMethodToImplement]; 

您可以爲不屬於關鍵字@optional下方,在關鍵字@optional以下聲明的協議方法的任何方法做到這一點安全,你應該先檢查是否委託決定或不執行這樣的方法:

if ([delegate respondsToSelector:@selector(theOptionalMethod)]) 
[delegate theOptionalMethod]; 
1

委託從被「授權」到他們的其他對象接收消息,並且作用於它們。

讓我們看一個UITableView爲例。它有一個UITableViewDelegate要求另一個對象如何作用於某些事情,例如,行高。

1

委託是一組回調函數組合在一個類中。爲了幫助你一點理解,假設這種方法簽名:

-[Foo doStuffWithInteger:(int)foo thenExecute:void (^block)(Foo*)] 

(你知道塊吧?)的文件會告訴,一旦該方法的主要算法已經完成,它會回調(執行)傳遞的塊。

的委託模式是年齡大了,做事有點不同。與委託模式,Foo類將有這兩種方法來代替:

-[Foo setDelegate:(id)delegate] 
-[Foo doStuffWithInteger:(int)foo] 

doStuffWithInteger結束調用塊代替,所述Foo對象將呼籲委託的方法。這意味着代表必須執行某種方法,如-[??? foo:(Foo*) completedStuffWithInteger:(int)]Foo類將能夠使用。所有需要回調的方法可能會在代理上調用不同的方法。

Objective-C中的委託通常允許您爲類實現自定義行爲,而不必對它們進行子類化。例如,CALayer的代表可以實現draw:inContext:方法,該方法在需要繪製圖層時調用,並將向該圖層提供內容。

由於Objective-C是duck-typed,所以可以使用任何實現委託方法的類。