c - Objective-C运行时如何实例化根元类和其他类描述?

标签 c class instantiation metaclass objective-c-runtime

我正在尝试实现一个基本的面向对象的 ANSI C 运行时并使用 Objective-C 作为指南。

它们似乎是三个部分。类描述、类接口(interface)和类实现。为了实例化类接口(interface),只有在运行时已经使用类描述实例化了您的类对象时,才能使用熟悉的使用类对象实例化一个对象的方法。

那么所有的类定义都是在第一次运行时静态分配的,以提供使用类对象实例化的能力吗?或者如果它们是动态分配的(在初始调用时),如何分配?它是运行循环的一部分,还是 Class 实际上是一个在转发消息之前确定它是否已经分配的函数?

最佳答案

运行时通过在实际程序执行之前调用的构造函数进行一些初始化。它们在 gcc 和 clang 中都使用 __attribute__((constructor))

在 Objective-C 的情况下,其中一些由编译器嵌入到二进制文件中。您必须将它们包含在标题中才能达到类似的效果。

这些函数使用编译器自动嵌入的数据。他们做一些事情,例如为类查找函数构建哈希表,然后将其用于实际的消息传递。

另一方面,实例是动态分配的。

我正在做类似的事情,所以我真的不知道比那多多少,但这和我挖的一样深。

关于c - Objective-C运行时如何实例化根元类和其他类描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2219501/

相关文章:

有人可以解释一下程序的这个提示吗?

c - 用于反转弦的单衬

conditional - 使用稍后在 verilog 中定义的条件变量

java - Java 中非实例化类的内存管理是如何工作的?

java - 在 JavaFX 中填充 TableView

C++ - 为任何 lambda 创建实例化桶

Swift - 在静态/类函数中引用当前类类型

c - 通过将结构体的地址获取到其他类型的结构体的指针来获取临时[-fpermissive]的地址

c - 变量函数参数传递相关说明 "printf"

ios - Swift 覆盖类函数