gpt4 book ai didi

objective-c - 在 Objective-C 中, "id"是否与 C 中的 "void *"相同,程序在方法调用期间如何告诉类?

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

在 Objective-C 中,id 是否与 C 中的 void * 完全相同? (通用指针类型)。

如果是这样,当我们使用

id obj = [[Fraction alloc] init];
[obj methodName];
obj = [[ComplexNumber alloc] init];
[obj anotherMethodName];

调用方法时,程序通过什么方式知道obj是什么类?

最佳答案

idvoid * 不同。 id 是指向未知类型的 Objective C 对象的指针;就像 C# 或 Java 的 object 数据类型。 void* 可以指向任何东西;非零 id 应指向所有 ObjC 对象共有的数据结构,并包含指向其各自类数据的指针。

ObjC 运行时 - alloc/init/etc 的实现。 - 确保所有有效对象中都有正确的类指针。

IIRC,在 Apple 的实现中,id 指向 的指针大小的变量是,实际上是指向类的指针。

在类的数据 block 中,有一个方法列表,将方法签名映射到指向方法实现的函数指针。从那里开始,这是一个相当简单的查找,当您向对象发送消息(即调用方法)时,它会在运行时发生。也是一个指向基类的指针,以便方法查找可以在继承树中继续向上。

顺便说一句,这就是为什么取消引用 void 指针是编译器错误,而向 id 发送消息是合法的,如果静态不安全的话。

关于objective-c - 在 Objective-C 中, "id"是否与 C 中的 "void *"相同,程序在方法调用期间如何告诉类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273785/

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