NSTextFieldDelegate真的是什么?

时间:2013-05-16 03:24:39

标签: objective-c xcode delegates protocols grammar

NSTextFieldDelegate 的声明让我非常困惑。

在Xcode中,我点击NSTextFieldDelegate的“跳转到定义”,然后找到:

@protocol NSTextFieldDelegate <NSControlTextEditingDelegate> @end

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

然而,Obj-C的书我没有提到“&lt;&gt;”时的意思意味着它遵循协议声明......

所以,问题1:“&lt;&gt;”是什么是指在宣布议定书之后?


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

@interface NSObject(NSControlSubclassNotifications)

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

@end

哦,这里有新问题:
问题2:什么是syntex“NSObject(NSControlSubclassNotifications)”是什么意思?实际上 NSControlSubclassNotifications 是什么?

Quesiont 3: NSObject,NSControlSubclassNotifications和NSControlTextEditingDelegate之间有什么关系? apple doc简单地说:“NSTextFieldDelegate协议采用NSControlTextEditingDelegate协议,目前不会进一步扩展它。”但我无法理解它的意思......

1 个答案:

答案 0 :(得分:1)

  1. 这意味着协议符合(“采用”)另一种协议,因此协议基本上包含两种协议中的所有方法。它有点类似于子类化。
  2. 这是一个类别,在这种情况下用作非正式协议。它实现了与(正式)协议几乎相同的目的(虽然这只是一个类别的用例),你将在旧版API中看到这种风格。
  3. NSControlSubclassNotificationNSObject上的类别。它基本上为从NSObject继承的所有类添加了新方法。 NSTextFieldDelegate实际上与NSControlTextEditingDelegate有效,只是名称不同,但未来可能会添加与NSControlTextEditingDelegate无关的新方法,这可能就是为什么它被设计为一个单独的协议。