如何理解NSObject,它既是协议又是接口

时间:2010-06-23 06:35:57

标签: iphone interface protocols nsobject

您可以在NSObject.h文件中看到以下内容

// 1.这是一个协议

@protocol NSObject

// 2.这是一个符合上述协议的接口

@interface NSObject <NSObject> {
    ...

// 3.下面“()”的含义是什么? NSCoderMethods是一个协议

@interface NSObject (NSCoderMethods)

NSObject非常重要,我需要理解,为什么它的设计是这样的?

1 个答案:

答案 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添加了额外的方法实现。