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

For*_*est 2 iphone protocols interface nsobject

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

// 1.这是一个协议

@protocol NSObject
Run Code Online (Sandbox Code Playgroud)

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

@interface NSObject <NSObject> {
    ...
Run Code Online (Sandbox Code Playgroud)

// 3.下面"()"的含义是什么?NSCoderMethods是一种协议

@interface NSObject (NSCoderMethods)
Run Code Online (Sandbox Code Playgroud)

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

ken*_*ytm 5

1.

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


2.

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

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

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

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

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

@protocol Foo <NSObject>
...
Run Code Online (Sandbox Code Playgroud)

3.

它是一个类别,它为NSObject添加了额外的方法实现.