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符合哪些协议?
这是两个完全不同的问题:
这@protocol只是一个叫做协议的"前向声明" NSDraggingSource.这有效地说"存在一个被称为协议的协议,NSDraggingSource并且应该在语法上被接受为协议引用".但是,在您遇到实际的协议定义之前,协议的要求是未知的.
当您要指定属性或方法参数必须符合协议时,通常会使用这些前向声明,但此时您并不关心协议要求是什么.协议定义必须通过您获取@implementation这些方法和属性的时间来定义,但是在@interface我们只需要知道该名称的协议存在时.
你问他们为什么不只是添加NSDraggingSource到NSView符合协议的列表中.仅仅存在@protocol前瞻性声明与是否NSView符合无关.
在这种情况下,它不NSView符合这个协议,而是符合source其中一个NSView方法的参数,即beginDraggingSessionWithItems.因此,@interface我们需要知道该名称的协议存在,但在我们到达之前,我们不会担心该协议的具体要求@implementation.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |