4

NSObject 类有 NSObject 协议。

重点是什么?

这是模拟多重继承的某种方式吗?

这是什么图案?

4

2 回答 2

7

不,只是:

  1. Foundation 框架过于流行,并且NSObject在涉及根类时占据了该领域的主导地位。

  2. 这就是为什么人们习惯了它的名字和它实现的信息和方法。例如,Objective-C 开发人员通常希望一个类实现+ allocand - init,但这只是一个常见的约定,一个类不一定这样做。

  3. 但是当NSObject不是层次结构根类时(例如,想想NSProxy),让它响应所有消息NSObject实现仍然很方便,因此不必学习完全不同的一组新名称和约定。

  4. 这就是为什么 Apple 选择将这些常用方法提取到一个名为 的单独协议NSObject中,NSObject该类实现了该协议 - 并且对任何理智的根类都这样做。

所以基本上,这只是为了方便和代码可读性:)

于 2013-06-09T07:55:56.863 回答
3

主要(实用/美观)原因以及您在许多苹果标题中看到的内容是其他协议。

协议通常不会“派生”自 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 的“设计界面”的想法

于 2013-06-09T09:55:30.730 回答