Objective-C对基元使用单字母类型编码;例如,'c'
为char
,'i'
为int
。这些内容记录在Obj-C运行时参考中。
是否存在可以对这些进行建模的enum
?
答案 0 :(得分:2)
没有这样的enum
。编码最初由编译器构建,编译器只是在其代码中嵌入了文字字符串。您可以在ASTContext.cpp
中看到它们,特别是方法getObjCEncodingForTypeImpl()
和getObjCEncodingForPrimitiveKind()
。
runtime library在objc-typeencoding.mm中有一组读取这些字符串的函数。你可以自己使用它们;该代码可在Apple的开源许可下使用。 (编译器ASTContext
也有一种方法可以执行此操作,DecodeTypeFromStr()
。)
显然,运行时和编译器必须保持同步,直到这些编码。实际上,由于更改类型的编码字符会产生二进制不兼容性,因此根本不可能发生,当然也不会没有通知;您可以依赖运行时指南中的列表来保持稳定。
当然,我不想说添加的内容:"@?"
是一个Block的编码字符串,在它们被引入之前并不存在(尽管它和&# #39; s类似于/派生自表示函数指针的"^?"
。
您可能也对Mike Ash的article about linking up libffi and Blocks感兴趣,他在其中演示a series of macros来读取编码字符串和 产生它的真实类型。