什么是协议?

时间:2010-10-20 20:06:20

标签: objective-c

我已阅读文档,但我仍然感到困惑。有人可以解释一下协议是什么吗? (您可以提供代码示例,但我真的在寻找解释)

2 个答案:

答案 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

我希望它能帮助你学习协议。