NSObject 类有 NSObject 协议。
重点是什么?
这是模拟多重继承的某种方式吗?
这是什么图案?
不,只是:
Foundation 框架过于流行,并且NSObject
在涉及根类时占据了该领域的主导地位。
这就是为什么人们习惯了它的名字和它实现的信息和方法。例如,Objective-C 开发人员通常希望一个类实现+ alloc
and - init
,但这只是一个常见的约定,一个类不一定这样做。
但是当NSObject
不是层次结构的根类时(例如,想想NSProxy
),让它响应所有消息NSObject
实现仍然很方便,因此不必学习完全不同的一组新名称和约定。
这就是为什么 Apple 选择将这些常用方法提取到一个名为 的单独协议NSObject
中,NSObject
该类实现了该协议 - 并且对任何理智的根类都这样做。
所以基本上,这只是为了方便和代码可读性:)
主要(实用/美观)原因以及您在许多苹果标题中看到的内容是其他协议。
协议通常不会“派生”自 NSObject。这意味着符合某个协议的委托和数据源似乎不再是 NSObject。
@protocol TableDelegate
...
@end
id<TableDelegate> delegate = bla;
==> 委托似乎没有响应基本的 NSObject 方法。您需要将其定义为 NSObject ...但在定义中混合类和协议感觉很糟糕。
所以让@protocol 成为一个 NSObject!为此,我们需要一个 NSObject 协议:
@protocol TableDelegate<NSObject>
...
@end
id<TableDelegate> delegate = bla;
===> delegate 符合 NSObject 一切感觉更自然
它也更类似于 imo 的“设计界面”的想法