给定一个 Objective-C 类型 type
,可以轻松地获取该类型的 encoding encoding
和大小 size
:
const char *encoding = @encode(type);
size_t size = sizeof(type);
换句话说,我们有映射。
@encode: type_t -> const char *
sizeof: type_t -> size_t
这里有两个问题:
(1) 假设我们只有编码而没有类型,那么得到一个映射是很好的。
sizeofencodedtype: const char * -> size_t
对于每个type_t type
,我们都有以下情况:
sizeofencodedtype(@encode(type)) = sizeof(type)
这样的功能已经存在吗?如果不存在,该如何构建一个?
(2) 理想情况下,我们可以反转 @encode 映射以创建一个映射。
decode: const char * -> type_t
但是似乎不可能,因为type_t不是真正的C类型。我想我可以等待@decode被添加到语言中,但这不是非常现实或时间敏感的。但是,在运行时使用其编码实例化类型不应该是可能的吗?
参考资料: Objective-C Runtime编程指南-类型编码