objective-c – 在Objective C中,“id”与C中的“void *”相同,以及程序在方法调用期间如何告诉类?

在Objective C中,id与C中的void *完全相同吗? (通用指针类型).

如果是这样,我们使用的时候

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

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

解决方法

id与void *不同. id是指向未知类型的Objective C对象的指针;喜欢C#或Java的对象数据类型.空洞*可以指向任何东西;非nil id应指向所有ObjC对象共有的数据结构,并包含指向其各自类数据的指针.

ObjC运行时 – alloc / init / etc的实现. – 确保所有有效对象都包含正确的类指针.

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

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

顺便说一句,这就是为什么在向id发送消息时,如果静态不安全的话,derefencing void指针是编译器错误的原因是合法的.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...