Obj-C类接口中的尖括号"<...>"是什么?

rob*_*kes 20 macos cocoa objective-c

谁能告诉我Obj-C类接口中的尖括号"<...>"有什么用呢?像这样... http://snipt.net/robhawkes/cocoa-class-interface

@interface MapMeViewController : UIViewController <CLLocationManagerDelegate, 
            MKReverseGeocoderDelegate, MKMapViewDelegate, UIAlertViewDelegate> { ... }
Run Code Online (Sandbox Code Playgroud)

从我的观点它们看起来像某种类型声明的(考虑到我以前在PHP和JavaScript的经验),就像我们要确保MapMeViewControllerCLLocationManagerDelegate,MKReverseGeocoderDelegate,MKMapViewDelegate,或UIAlertViewDelegate

有关@interface语法的文档似乎没有提到这一点.

Pey*_*loW 35

类接口定义中的尖括号表示您的类符合的协议.

协议几乎就像Java或C#中的接口,并且Objective-C协议中的方法可以是可选的.

另外,在Objective-C中,您可以声明变量,参数或实例变量以符合多个协议.例

NSObject<NSCoding, UITableViewDelegate> *myVariable;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,类必须是NSObject或子类(仅限NSProxy其子类将失败),并且它还必须符合两者NSCodingUITableViewDelegate协议.

在Java或C#中,这只能通过实际声明所述类来实现.


phi*_*red 9

尖括号表示协议.它们类似于其他语言的接口.


Tec*_*Zen 6

您还可以在类似转换的代码中使用它们,以告诉编译器期望符合特定协议的对象.

id <NSFetchedResultsSectionInfo> sectionInfo = [[self.noteFetcher sections] objectAtIndex:section];
Run Code Online (Sandbox Code Playgroud)