Objective-C 对原语使用单字母类型编码;例如,'c'
是char
,'i'
是int
。这些都记录在 Obj-C 运行时参考中。
是否存在enum
模拟这些的模型?
Objective-C 对原语使用单字母类型编码;例如,'c'
是char
,'i'
是int
。这些都记录在 Obj-C 运行时参考中。
是否存在enum
模拟这些的模型?
没有这样enum
的。编码最初由编译器构建,它只是将文字字符串嵌入其代码中。您可以在 中看到它们ASTContext.cpp
,特别是方法getObjCEncodingForTypeImpl()
和getObjCEncodingForPrimitiveKind()
。
运行时库在objc-typeencoding.mm中有一组函数来读取这些字符串。你可以自己使用这些;该代码在 Apple 的开源许可下可用。(编译器ASTContext
也有一种方法可以做到这一点,DecodeTypeFromStr()
。)
显然,就这些编码而言,运行时和编译器必须保持同步。事实上,因为改变一个类型的编码字符会造成二进制不兼容,所以这根本不可能发生,当然也不是没有通知;您可以依靠运行时指南中的列表来保持稳定。
当然,这并不是说不会添加东西:"@?"
是块的编码字符串,在引入它们之前并不存在(尽管它类似于/派生自"^?"
表示函数指针的 )。
您可能还对 Mike Ash关于连接 libffi 和 Blocks 的文章感兴趣,其中他演示了一系列宏来读取编码字符串并生成其真实类型。