在多个类中使用委托声明

时间:2011-01-07 19:13:37

标签: iphone objective-c delegates

假设我有一个类ClassA,它在ClassA.h中声明了一个协议:

@protocol SomeProtocol

- (void)myMethod;

@end

现在,假设我还有一个班级ClassB。我真的想在SomeProtocol中使用ClassB,就像这样:

#import ClassA.h

@interface ClassB : NSObject
{
    id <SomeProtocol> someObject;
}

但编译器一直告诉我它“无法找到”SomeProtocol“的协议声明。

我缺少什么想法?

2 个答案:

答案 0 :(得分:3)

将您的ClassB更改为:

@protocol SomeProtocol;

@interface ClassB : NSObject
{
    id <SomeProtocol> someObject;
}

只是澄清一下,使用这样的@protocol指令只是告诉编译器SomeProtocol是一个稍后定义的协议。这只是对协议的前向引用,而无需导入定义它的接口。

可在此处找到更多信息(非常底部):http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProtocols.html

答案 1 :(得分:2)

您也可以将协议放在SomeProtocol.h(它自己的头文件)中,并从A类和B类导入它。

如果你没有导入协议,你就不会得到很好的编译时间警告,告诉你什么时候你在调用它时出错......