@protocol是什么意思?

Bob*_*and -2 protocols objective-c

查看Apples头文件NSView.h

我看到这一行

@protocol NSDraggingSource;
Run Code Online (Sandbox Code Playgroud)

后来我明白了

@interface NSView : NSResponder <..., NSDraggingDestination,...>
Run Code Online (Sandbox Code Playgroud)

那么NSView符合哪些协议?

Rob*_*Rob 5

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

  • @protocol只是一个叫做协议的"前向声明" NSDraggingSource.这有效地说"存在一个被称为协议的协议,NSDraggingSource并且应该在语法上被接受为协议引用".但是,在您遇到实际的协议定义之前,协议的要求是未知的.

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

  • 你问他们为什么不只是添加NSDraggingSourceNSView符合协议的列表中.仅仅存在@protocol前瞻性声明与是否NSView符合无关.

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