NSObject类有NSObject协议。
有什么意义?
这是一种模仿多重继承的方法吗?
这是什么模式?
答案 0 :(得分:7)
没有。就是这样:
基础框架过于流行,NSObject
在根类方面占据主导地位。
这就是为什么人们习惯了它的名字以及它实现的信息和方法。例如,Objective-C开发人员通常期望一个类实现+ alloc
和- init
,但这恰好是一个常见的约定,类不一定如此。
但是当NSObject
不是层次结构的根类时(例如,只考虑NSProxy
),让它响应时仍然很方便所有消息NSObject
都实现了,因此不需要学习一组完全不同的新名称和约定。
这就是为什么Apple选择将这些常用方法提取到一个名为NSObject
的单独协议中,NSObject
类实现 - 并且这样做任何理智的根类。
所以基本上,它只是为了方便和代码可读性:)
答案 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
的想法