我已阅读文档,但我仍然感到困惑。有人可以解释一下协议是什么吗? (您可以提供代码示例,但我真的在寻找解释)
答案 0 :(得分:11)
Here's a great article on it。实际上,Objective-C中的协议非常类似于Java中的接口或C ++中的纯虚拟类(尽管不完全像纯虚拟类可以拥有数据成员......)。它基本上是一个特定类知道如何响应给定方法(消息)的保证。
编辑原始文章消失了,所以我用其他教程替换了它。
答案 1 :(得分:4)
协议是定义类实现的必需和/或可选方法列表的方法。如果一个类采用协议,它必须在它采用的协议中实现所有必需的方法。 Cocoa使用协议通过Objective-C消息支持进程间通信。此外,由于Objective-C不支持多重继承,因此您可以使用协议实现类似的功能,因为类可以采用多个协议。
协议的一个很好的例子是NSCoding,它有两个必须实现的方法。该协议用于对类进行编码和解码,即通过写入永久存储来归档对象。
@protocol NSCoding
-(void)encodeWithCoder:(NSCoder *)aCoder;
-(id)initWithCoder:(NSCoder *)aDecoder;
@end
要采用协议,请在<>中附上协议的名称。如下所示
@interface SomeClass : NSObject <NSCoding>
{
some variables
}
如何定义协议?
我们可以在协议中创建所需的可选方法。以下是对名为“Hello”的协议的定义:
@protocol Hello
- (BOOL)send:(id)data;
- (id)received;
@optional
- (int)progress;
@end
要使用该协议,与上面的示例一样,在接口中声明协议并在类实现中编写所需的方法:
//界面 @interface AnotherClass:NSObject
{
some declaration
}
//实施 @implementation AnotherClass
- (BOOL)send:(id)data
{
some declaration
}
- (id)received
{
some code
}
//可选方法
- (int)progress
{
some code
}
@end
我希望它能帮助你学习协议。