2010-11-08 85 views
0

我想讓我的腦袋回合Objective-C協議。我已經看過蘋果文檔以及我擁有的幾本書中的相關章節,但幾乎總是將協議看作是在將它們用作委託對象的接口方面進行定義。我瞭解創建協議定義的概念:需要簡單的協議示例?

@protocol PetProtocol <NSObject> 
- (void)printCat; 
- (void)printDog; 
@end 

我也明白,我符合一類的協議,該位:

@interface CustomController : UIViewController <PetProtocol> { 

其次是實現所需的方法。

@implementation CustomController 

- (void)printCat { 
    NSLog(@"CAT"); 
} 

- (void)printDog { 
    NSLog(@"DOG"); 
} 

我想我的問題是,如何使用該協議,似乎有點陌生,其中的方法實現打電話,printCatprintDogCustomController,任何人都可以點我在或者給我的一個非常簡單的例子使用這個協議或類似的?

非常感謝

加里。

回答

4

的協議僅僅是一個,一個對象可以響應的消息的列表。如果一個對象符合協議,它就會說:「我對這些消息作出迴應。」這樣,您可以返回調用方可以使用的對象,而不必承諾對象將具有任何特定類型。例如,對於該協議,你可以這樣做:

id<PetProtocol> getSomeObjectThatConformsToThePetProtocol() { 
    return [[[CustomController alloc] init] autorelease]; 
} 

int main() { 
    id<PetProtocol> foo = getSomeObjectThatConformsToThePetProtocol(); 
    [foo printCat]; 
    [foo printDog]; 
    return 0; 
} 

見,main()並不需要知道對象是CustomController - 它只是知道你可以送什麼消息的對象。任何符合PetProtocol的課程都可以。這就是協議的用途。

2

協議(或委託)用於調用不同類中的方法。例如,包含該協議的類(稱爲PetClass)將調用[self.delegate printCat],並且委託類(CustomController)將爲PetClass對象執行該方法。

這可能會有所幫助:

代表團: 權力和責任 另一個人(通常是從一個 經理給下屬)的分配進行 具體活動

這當然假設你已經在你的頭文件中定義了self.delegate,並在你的實現中將它合成:

部首IVARS:

id <PetProtocol> delegate; 

實現:

@implementation PetClass 
@synthesize delegate; 
+0

如果你還在學習Objective-C,你可能想試試這個:http://www.lynda.com/home/DisplayCourse.aspx?lpk2 = 48369&srchtrk = index:6%0Alinktypeid:2%0Aq:iphone%20sdk%0Apage:1%0As:relevant%0Asa:true%0Aproducttypeid:4它的冗長,你必須付錢,但我用它,它絕對值得它 – livemac 2010-11-08 19:16:48

+0

協議和代表不是一回事。協議很方便用於指定委託接口,但您不必使用協議。 – JeremyP 2010-11-08 21:34:26