@protocol是什么意思?

时间:2018-04-12 16:12:58

标签: objective-c protocols

查看Apples头文件NSView.h

我看到这一行

@protocol NSDraggingSource;

后来我看到了

@interface NSView : NSResponder <..., NSDraggingDestination,...>

那么NSView符合哪些协议?

1 个答案:

答案 0 :(得分:5)

这是两个完全不同的问题:

  • @protocol只是一个&#34;前向声明&#34;称为NSDraggingSource的协议。这实际上说&#34;存在一个名为NSDraggingSource的协议,并且应该在语法上被接受为协议引用。&#34;在您遇到实际的协议定义之前,协议的要求是未知的。

    当您要指定属性或方法参数必须符合协议时,通常会使用这些前向声明,但此时您并不关心协议要求是什么。协议定义必须在到达这些方法和属性的@implementation时定义,但在@interface时我们只需要知道该名称的协议存在。

  • 您问他们为什么不将NSDraggingSource添加到NSView符合的协议列表中。仅@protocol前向声明的存在与NSView是否符合无关。

    在这种情况下,它不是符合此协议的NSView,而是符合source方法之一的NSView参数,即{ {3}}。因此,在@interface我们需要知道该名称的协议存在,但在我们到达@implementation之前,我们不会担心该协议的具体要求。

相关问题