什么是声明一个类并声明一个具有相同名称的协议?

时间:2013-06-09 07:50:53

标签: objective-c

NSObject类有NSObject协议。

有什么意义?

这是一种模仿多重继承的方法吗?

这是什么模式?

2 个答案:

答案 0 :(得分:7)

没有。就是这样:

  1. 基础框架过于流行,NSObject在根类方面占据主导地位。

  2. 这就是为什么人们习惯了它的名字以及它实现的信息和方法。例如,Objective-C开发人员通常期望一个类实现+ alloc- init,但这恰好是一个常见的约定,类不一定如此。

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

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

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

答案 1 :(得分:3)

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

协议通常不会从NSObject“派生”......这意味着符合某个协议的委托和数据源似乎不再是NSObjects。

@protocol TableDelegate  
...
@end

id<TableDelegate> delegate = bla;

==&GT;委托似乎没有响应基本的NSObject方法。你需要将它定义为NSObject ...但是在定义中混合类和协议会感觉很糟糕。

所以让@protocol成为NSObject!要做到这一点,我们需要一个NSObject协议:

@protocol TableDelegate<NSObject>  
...
@end

id<TableDelegate> delegate = bla;

===&GT;委托符合NSObject,感觉更自然


它也更像是'设计界面'imo

的想法