0

NSTextFieldDelegate的声明真的让我很困惑。

在Xcode中,我点击NSTextFieldDelegate的“跳转到定义”,发现:

@protocol NSTextFieldDelegate <NSControlTextEditingDelegate> @end

我知道如果我们在 NSObject 类型(例如“id”)声明之后添加 <...> 语法,这意味着该对象符合“<>”中指定的协议。

但是,Obj-C 的书籍我没有提到当“<>”表示它遵循协议声明时的含义......

那么,问题1: “<>”在协议声明之后是什么意思?


我继续查看NSControlTextEditingDelegate,发现有几个方法以“control:...”开头。但最吸引我的是NSControlTextEditingDelegate定义上面的文字:

@interface NSObject(NSControlSubclassNotifications)

- (void)controlTextDidBeginEditing:(NSNotification *)obj;
- (void)controlTextDidEndEditing:(NSNotification *)obj;
- (void)controlTextDidChange:(NSNotification *)obj;

@end

哦,新问题来了:
问题2:语法“NSObject(NSControlSubclassNotifications)”是什么意思?NSControlSubclassNotifications实际上是什么?

问题3: NSObject、NSControlSubclassNotifications和NSControlTextEditingDelegate之间的关系是什么?苹果文档简单地说:“NSTextFieldDelegate 协议采用了 NSControlTextEditingDelegate 协议,目前没有进一步扩展它。” 但我无法理解它的含义...

4

1 回答 1

1
  1. 这意味着该协议符合(“采用”)另一个协议,因此基本上该协议包含两个协议中的所有方法。这有点类似于子类化。
  2. 它是一个类别,在这种情况下用作非正式协议。它实现了与此处的(正式)协议几乎相同的目的(尽管这只是类别的一个用例),您将主要在较旧的 API 中看到这种风格。
  3. NSControlSubclassNotification是 上的一个类别NSObject。它基本上为所有继承自NSObject. NSTextFieldDelegate实际上与 相同NSControlTextEditingDelegate,只是名称不同,但将来可能会添加与 无关的新方法NSControlTextEditingDelegate,因此这可能就是将其设计为单独协议的原因。
于 2013-05-16T03:45:49.120 回答