什么是协议?

9

我已经阅读了文档,但仍然感到困惑。请问有人可以解释一下什么是协议吗?(你可以给出代码示例,但我真的想要一个解释)

2个回答

11

这里有一篇很棒的文章。在Objective-C中,协议与Java中的接口或C++中的纯虚类非常相似(尽管不完全相同,因为纯虚类可以具有数据成员...)。它基本上是确保特定类知道如何响应给定集合的方法(消息)的保证。

编辑:原始文章已经消失,我已经替换成了一个不同的教程。


3
除非协议定义了可选的方法,否则它是一个保证。在这种情况下,您仍然需要检查方法是否已实现。 - Philippe Leybaert
协议也可以有属性。 - Parag Bafna

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

我希望这篇内容能帮助您了解协议(Protocol)方面的知识。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接