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