gpt4 book ai didi

iphone - 为什么要将 NSObject 的协议(protocol)附加到协议(protocol)实现中

转载 作者:太空狗 更新时间:2023-10-30 03:09:09 25 4
gpt4 key购买 nike

我看到一些类似于以下的代码:

@protocol MyProtocol <NSObject>
// write some methods.
@end

MyProtocol 遵循 NSObject 协议(protocol)有什么特别的原因吗?如果您执行以下操作,这不是多余的吗:

id <MyProtocol> foo; // foo here conforms to NSObject AND MyProtocol?

只是好奇逻辑是什么。

最佳答案

当你声明一个变量时

 id<MyProtocol> var;

Objective-C 编译器只知道 MyProtocol 中的方法,因此如果您尝试调用任何 NSObject 方法,例如 -retain/-release,在那个实例上。因此,Cocoa 定义了一个 NSObject 协议(protocol),它反射(reflect)了 NSObject 类和实例方法。通过声明 MyProtocol 实现 NSObject 协议(protocol),您向编译器提示所有 NSObject 方法将由实现的实例实现我的协议(protocol)

为什么这一切都是必要的? Objective-C 允许对象从任何根类继承。在 Cocoa 中,NSObject 是最常见的,但不是唯一的根类。例如,NSProxy 也是一个根类。因此 id 类型的实例不一定继承 NSObject 的方法。

关于iphone - 为什么要将 NSObject 的协议(protocol)附加到协议(protocol)实现中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/679822/

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