【发布时间】:2011-04-28 06:22:31
【问题描述】:
我已经阅读了文档,但我仍然感到困惑。有人可以解释一下协议是什么吗? (你可以给出代码示例,但我真的在寻找解释)
【问题讨论】:
标签: objective-c
我已经阅读了文档,但我仍然感到困惑。有人可以解释一下协议是什么吗? (你可以给出代码示例,但我真的在寻找解释)
【问题讨论】:
标签: objective-c
Here's a great article on it。实际上,Objective-C 中的协议与 Java 中的接口或 C++ 中的纯虚拟类非常相似(尽管不完全像纯虚拟类可以具有数据成员......)。它基本上保证了特定类知道如何响应给定的一组方法(消息)。
编辑原来的文章不见了,所以我用另一个教程代替了它。
【讨论】:
protocol 是指定义一个类实现的必需和/或可选方法的列表。如果一个类采用协议,它必须实现它采用的协议中所有必需的方法。 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 另一个类:NSObject
{
some declaration
}
// 实现 @实现另一个类
- (BOOL)send:(id)data
{
some declaration
}
- (id)received
{
some code
}
// 可选方法
- (int)progress
{
some code
}
@end
希望对你学习协议有帮助。
【讨论】: