我正试图了解 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
调用printDog
和CustomController
来实现这些方法似乎有点奇怪,任何人都可以指点我或者给我一个使用这个协议或类似的简单例子?
非常感谢
加里。
答案 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;