gpt4 book ai didi

iphone - 如何理解NSObject,它既是协议(protocol)又是接口(interface)

转载 作者:行者123 更新时间:2023-12-03 20:35:59 25 4
gpt4 key购买 nike

您可以在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com