我确信我已经在某个地方看过这个,有谁能告诉我这是什么< >在以下界面中表示?
@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 {
加里
答案 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的委托必须实现的方法。