【问题标题】:What is a Protocol?什么是协议?
【发布时间】:2011-04-28 06:22:31
【问题描述】:

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

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    Here's a great article on it。实际上,Objective-C 中的协议与 Java 中的接口或 C++ 中的纯虚拟类非常相似(尽管不完全像纯虚拟类可以具有数据成员......)。它基本上保证了特定类知道如何响应给定的一组方法(消息)。

    编辑原来的文章不见了,所以我用另一个教程代替了它。

    【讨论】:

    • 这是一种保证,除非协议定义了可选方法。在这种情况下,您仍然需要检查该方法是否已实现。
    • 协议也可以有属性。
    【解决方案2】:

    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
    

    希望对你学习协议有帮助。

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 2016-05-30
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2017-08-15
      • 1970-01-01
      相关资源
      最近更新 更多