我是一名C#开发人员,开始使用Objective-C / Cocoa Touch编程。我想我可能有些错误,因为我一直在考虑它们“C#方式”。 具体来说,我在各种文档和教程中使用了术语“协议”。
在Objective-C中,协议究竟是什么?可以将它与C#接口进行比较吗?
以下声明是否与“该类正在实现协议UITextFieldDelegate”相同?或者是否要将UITextFieldDelegate与C#中的泛型类型参数进行比较?
@interface MyViewController : UIViewController <UITextFieldDelegate> { }
答案 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 documentation的Optional Protocol Methods
部分。
wikibooks关于Objective-C Protocols的有用链接。
答案 1 :(得分:1)
协议就像某个方面的界面。 如果您声明协议中的某些方法是可选的,则该类采用它不需要实现这些方法。如果没有,该课程必须实施它。