@encode指令返回一个const char*,它是传入的数据类型的各种元素的编码类型描述符.示例如下:
struct test
{ int ti ;
char tc ;
} ;
printf( "%s", @encode(struct test) ) ;
// returns "{test=ic}"
Run Code Online (Sandbox Code Playgroud)
我可以看到使用sizeof()来确定原始类型 - 如果它是一个完整的对象,我可以使用类方法进行内省.
但是,它如何确定不透明结构的每个元素?
我正在尝试实现一个基本的面向对象的ANSI C运行时并使用Objective-C作为指导.
它们似乎分为三部分.类描述,类接口和类实现.为了实例化类接口,只有运行时已使用类描述实例化类对象时,才能使用熟悉的使用Class对象实例化对象的方法.
那么在第一次运行时是否静态分配了所有类定义,以提供使用Class对象进行实例化的能力?或者如果它们是动态分配的(在初始调用时),如何?它是运行循环的一部分还是Class实际上是一个函数,它确定在转发消息之前是否已经分配了它?
任何人都可以解释@encode如何将给定对象,结构或数据类型中存在的数据类型元素提取到类型定义中以用作实例化的类描述符?
或者可能是一些指向某些资源的指针,用于了解新预处理程序指令的实现?