2010-05-16 83 views
8

我是C#开发人员开始使用Objective-C/Cocoa Touch编程。我想我可能会因为我一直在考虑他们的“C#方式”而犯了一些错误的话。 具体来说,我在各种文档和教程中已经谈到了“协议”这个术语。Objective-C/Cocoa文档中的“采用协议”是什么意思?

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

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

@interface MyViewController : UIViewController <UITextFieldDelegate> { } 
+2

Objective-C协议== C#接口 – 2010-05-16 16:01:18

回答

7

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

@interface MyViewController : UIViewController <UITextFieldDelegate> { } 

意味着从类UIViewController类继承MyViewController和采用/实现协议UITextFieldDelegate

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

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

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

+0

我觉得你对最后一句话是错的。它不能实现所有的方法,但它可以实现它们 - 至少这就是文档所说的,也是我目前在我的代码中所做的。 – driis 2010-05-16 16:08:24

+0

除此之外,感谢您的明确答案:-) – driis 2010-05-16 16:10:37

+0

我认为Objective-C 2.0的引入改变了这里。 但是使用“旧”的Objective-C语义,一个类必须实现采用的协议中的所有方法。 – MKroehnert 2010-05-16 16:12:28

1

协议在某些方面就像一个接口。 如果您在协议中声明了某些方法是可选的,那么该类采用它并不需要实现这些方法。如果没有,班级必须执行它。