您可以在NSObject.h文件中看到以下内容
// 1.这是一个协议
@protocol NSObject
// 2.这是一个符合上述协议的接口
@interface NSObject <NSObject> {
...
// 3.下面“()”的含义是什么? NSCoderMethods是一个协议
@interface NSObject (NSCoderMethods)
NSObject非常重要,我需要理解,为什么它的设计是这样的?
答案 0 :(得分:5)
1
它是一个类(接口),因为ObjC中的所有具体类现在都从NSObject继承实现,以支持引用计数和运行时类型检查等功能。
2
现在对于协议......它的存在是因为NSObject不是唯一支持-retain
和-performSelector:
等方法的根类。
一个重要的类是NSProxy,它充当将消息转发给某些实际对象的代理。
NSProxy的目标通常是NSObject,因此接口也应该支持-retain
和-performSelector:
等方法。但是NSProxy不能继承NSObject,因为两者之间没有 is-a 关系。
为了表达兄弟关系,两者都采用相同的协议,不幸的是,它也称为NSObject。
使NSObject成为协议还有一个优点,即用户定义的协议可以请求采用者通过
支持所有常见的NSObject操作@protocol Foo <NSObject>
...
3
It's a category,它为NSObject添加了额外的方法实现。