查看Apples头文件NSView.h
我看到这一行
@protocol NSDraggingSource;
后来我看到了
@interface NSView : NSResponder <..., NSDraggingDestination,...>
那么NSView符合哪些协议?
答案 0 :(得分:5)
这是两个完全不同的问题:
@protocol
只是一个&#34;前向声明&#34;称为NSDraggingSource
的协议。这实际上说&#34;存在一个名为NSDraggingSource
的协议,并且应该在语法上被接受为协议引用。&#34;在您遇到实际的协议定义之前,协议的要求是未知的。
当您要指定属性或方法参数必须符合协议时,通常会使用这些前向声明,但此时您并不关心协议要求是什么。协议定义必须在到达这些方法和属性的@implementation
时定义,但在@interface
时我们只需要知道该名称的协议存在。
您问他们为什么不将NSDraggingSource
添加到NSView
符合的协议列表中。仅@protocol
前向声明的存在与NSView
是否符合无关。
在这种情况下,它不是符合此协议的NSView
,而是符合source
方法之一的NSView
参数,即{ {3}}。因此,在@interface
我们需要知道该名称的协议存在,但在我们到达@implementation
之前,我们不会担心该协议的具体要求。