2

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

// 1. 这是一个协议

@protocol NSObject

// 2.这里是一个接口,符合上面的协议

@interface NSObject <NSObject> {
    ...

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

@interface NSObject (NSCoderMethods)

NSObject 这么重要,我需要明白,为什么要这样设计呢?

4

1 回答 1

6

1.

它是一个类(接口),因为现在 ObjC 中的所有具体类都从 NSObject 继承实现,以支持引用计数和运行时类型检查等特性。


2.

现在对于协议......它存在是因为 NSObject 不是唯一支持-retainand-performSelector:等方法的根类。

一个重要的类是NSProxy,它充当将消息转发到某些实际对象的代理。

NSProxy 的目标通常是 NSObjects,所以接口也应该支持-retain-performSelector:方法。但是 NSProxy 不能从 NSObject 继承,因为两者之间没有is-a关系。

为了表达兄弟关系,两者都采用相同的协议,不幸的是,它也称为 NSObject。

使 NSObject 成为协议还有一个优点,即用户定义的协议可以请求采用者通过以下方式支持所有常见的 NSObject 操作

@protocol Foo <NSObject>
...

3.

它是一个 category,它为 NSObject 添加了额外的方法实现。

于 2010-06-23T12:04:30.943 回答