需要简单的协议示例?

时间:2010-11-08 19:02:17

标签: iphone objective-c cocoa-touch

我正试图了解 Objective-C协议。我查看了Apple文档以及我拥有的几本书中的相关章节,但几乎总是协议似乎是根据委托对象的接口使用它们来定义的。我理解创建协议定义的概念:

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

我也理解我将类与协议相符合的位:

@interface CustomController : UIViewController <PetProtocol> {

然后实施所需的方法。

@implementation CustomController

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

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

我想我的问题是如何使用这个协议,从printCat调用printDogCustomController来实现这些方法似乎有点奇怪,任何人都可以指点我或者给我一个使用这个协议或类似的简单例子?

非常感谢

加里。

2 个答案:

答案 0 :(得分:4)

协议只是对象可以响应的消息列表。如果一个对象符合协议,那就说“我回复这些消息”。这样,您可以返回调用者可以使用的对象,而不必承诺该对象将具有任何特定类型。例如,使用该协议,您可以这样做:

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

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

请参阅,main()不需要知道对象是CustomController - 它只知道您可以发送对象的消息。任何符合PetProtocol的类都可以。这就是协议的用途。

答案 1 :(得分:2)

协议(或委托)用于调用不同类中的方法。例如,包含协议的类(让我们称之为PetClass)将调用[self.delegate printCat],委托类(CustomController)将为PetClass对象传递该方法。

这也可能有所帮助:

  

委派:分配   权力和责任   另一个人(通常来自a   经理给下属开展   具体活动

这假定你已经在标题中定义了self.delegate并在你的实现中合成它:

Header iVars:

id <PetProtocol> delegate;

实现:

@implementation PetClass
@synthesize delegate;