什么< >在类接口中表示/表示?

时间:2009-10-08 17:37:30

标签: objective-c cocoa

我确信我已经在某个地方看过这个,有谁能告诉我这是什么< >在以下界面中表示?

@interface GameFinder : NSObject <NSNetServiceBrowserDelegate>
@end

是NSObject采用<NSNetServiceBrowserDelegate>

修改

有一件事令我困惑......

在我的示例中。界面显示 NSNetServiceBrowserDelegate

@interface ITunesFinder : NSObject <NSNetServiceBrowserDelegate>
@end

但是实现显示 netServiceBrowser ,这些是否相同?

@implementation ITunesFinder
-(void) netServiceBrowser: (NSNetServiceBrowser *) browser
           didFindService: (NSNetService *) service
               moreComing: (BOOL) moreComing {

加里

4 个答案:

答案 0 :(得分:13)

尖括号表示此类符合的 Protocols Objective-C Wikipedia文章中有关Protocols的详细信息,可能有助于为您清理一些内容。协议包含您的类可以提供的必需和可选例程。在后一种情况下,如果您的类没有实现例程,则使用默认的实现/行为。

答案 1 :(得分:5)

< >表示类符合的协议(或协议列表)。 Objective-C协议就像Java中的接口:它是符合类必须实现的方法列表。

答案 2 :(得分:3)

接口声明中的尖括号表示接口实现的Objective-C protocols列表。在这种情况下,GameFinder符合NSNetServiceBrowserDelegate协议。 Objective-C Language Reference有一个关于协议的完整部分(在学习Objective-C时,你应该保持一般的参考)。基本上,协议是一个接口,它描述了类必须实现的方法以符合该协议。 Classe接口可以使用尖括号表示法声明它们符合(实现)协议。如果您在类型声明中提供协议信息,编译器将检查协议一致性:

@interface Foo <Bar>
...

- (void)methodRequiringBar:(id<Bar>)arg;
@end

@interface Foo2 <Baz>
...
@end


id<Bar> v = [[Foo alloc] init]; //OK
id<Baz> v = [[Foo alloc] init]; //warning

[v methodRequiringBar:[[Foo2 alloc] init]]; //warning

如果类接口声明符合协议,但编译器也会警告您,但该协议中的所有必需方法都不是由类的实现实现的:

@protocol Bar
@required
- (void)requiredMethod;
@optional
- (void)optionalMethod;
@end

@interface Foo <Bar>
...
@end

@implementation Foo
- (void)optionalMethod {
...
}
@end

将发出Bar协议未完全实施的警告。

答案 3 :(得分:0)

NSNetServiceBrowser是一个类。 NSNetServiceBrowserDelegate是一个协议,指定NSNetServiceBrowser的委托必须实现的方法。