Objective-C / Cocoa文档中“采用协议”究竟是什么意思?

时间:2010-05-16 15:58:14

标签: iphone objective-c

我是一名C#开发人员,开始使用Objective-C / Cocoa Touch编程。我想我可能有些错误,因为我一直在考虑它们“C#方式”。 具体来说,我在各种文档和教程中使用了术语“协议”。

在Objective-C中,协议究竟是什么?可以将它与C#接口进行比较吗?

以下声明是否与“该类正在实现协议UITextFieldDelegate”相同?或者是否要将UITextFieldDelegate与C#中的泛型类型参数进行比较?

@interface MyViewController : UIViewController <UITextFieldDelegate> { }

2 个答案:

答案 0 :(得分:7)

在Objective-C中,protocoll是选择器/方法集合的名称,就像Java中的接口声明(可能也在C#中)。

@interface MyViewController : UIViewController <UITextFieldDelegate> { }

表示类MyViewController继承自类UIViewController并采用/实现协议UITextFieldDelegate

这意味着MyViewController必须实现UITextFieldDelegate中声明的所有方法。

编辑:似乎随着Objective-C 2.0的引入,引入了将协议方法标记为@optional@required的可能性。 请参阅Apples Objective-C documentationOptional Protocol Methods部分。

wikibooks关于Objective-C Protocols的有用链接。

答案 1 :(得分:1)

协议就像某个方面的界面。 如果您声明协议中的某些方法是可选的,则该类采用它不需要实现这些方法。如果没有,该课程必须实施它。