1

Objective-C 对原语使用单字母类型编码;例如,'c'char'i'int。这些都记录在 Obj-C 运行时参考中。

是否存在enum模拟这些的模型?

4

1 回答 1

2

没有这样enum的。编码最初由编译器构建,它只是将文字字符串嵌入其代码中。您可以在 中看到它们ASTContext.cpp,特别是方法getObjCEncodingForTypeImpl()getObjCEncodingForPrimitiveKind()

运行时库在objc-typeencoding.mm中有一组函数来读取这些字符串。你可以自己使用这些;该代码在 Apple 的开源许可下可用。(编译器ASTContext也有一种方法可以做到这一点,DecodeTypeFromStr()。)

显然,就这些编码而言,运行时和编译器必须保持同步。事实上,因为改变一个类型的编码字符会造成二进制不兼容,所以这根本不可能发生,当然也不是没有通知;您可以依靠运行时指南中的列表来保持稳定。

当然,这并不是说不会添加东西:"@?"是块的编码字符串,在引入它们之前并不存在(尽管它类似于/派生自"^?"表示函数指针的 )。

您可能还对 Mike Ash关于连接 libffi 和 Blocks 的文章感兴趣,其中他演示了一系列宏来读取编码字符串并生成其真实类型。

于 2013-01-10T20:01:55.220 回答