什么是尖括号“< ...>”在Obj-C类接口中?

时间:2009-12-16 11:04:34

标签: objective-c macos cocoa

任何人都可以告诉我尖括号“< ...>”在一个Obj-C类接口吗?像这样...... http://snipt.net/robhawkes/cocoa-class-interface

@interface MapMeViewController : UIViewController <CLLocationManagerDelegate, 
            MKReverseGeocoderDelegate, MKMapViewDelegate, UIAlertViewDelegate> { ... }

从我看来,它们看起来像某种类型声明(考虑到我以前的PHP和JavaScript经验),就像我们确保MapMeViewControllerCLLocationManagerDelegateMKReverseGeocoderDelegate一样, MKMapViewDelegateUIAlertViewDelegate

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

4 个答案:

答案 0 :(得分:35)

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

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

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

NSObject<NSCoding, UITableViewDelegate> *myVariable;

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

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

答案 1 :(得分:9)

尖括号表示protocol。它们类似于其他语言的接口。

答案 2 :(得分:6)

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

id <NSFetchedResultsSectionInfo> sectionInfo = [[self.noteFetcher sections] objectAtIndex:section];

答案 3 :(得分:4)

Apple文档报告使用括号;请参阅第4章“采用议定书”的The Objective-C Programming Language

  

采用协议在某些方面类似于声明超类。两者都为类分配方法。超类声明为其分配继承的方法;协议为协议列表中声明的方法分配它。如果一个类在其声明中列出了超类名后的尖括号内的协议,则称该类采用正式协议:

@interface ClassName : ItsSuperclass < protocol list >
     

类别以相同的方式采用协议:

@interface ClassName ( CategoryName ) < protocol list >