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