与@encode相反

时间:2012-12-16 16:53:04

标签: objective-c encoding types objective-c-runtime

@encode是否有相反的运营商?

例如,当您执行此操作时:@encode(int),您获得"i"。我希望能够这样做:@decode("i") myInt = 5;

这可能吗?是否存在操作员来处理这个问题?

3 个答案:

答案 0 :(得分:7)

没有。 @encode采用类型,而在C中,不可能返回类型。 (typeof()运算符是GNU扩展名,但它不带C字符串,因此无法实现所需。

您有两种选择。一:重新设计你的代码。如果需要,可能存在设计问题。

二,使用动态内存分配并编写自己的函数,该函数接受一个类型字符串并相应地分配内存。

答案 1 :(得分:0)

您可以使用NSGetSizeAndAlignment来获取尺寸并进行分配。

NSUInteger size;
NSGetSizeAndAlignment(encoding, &size, NULL);
void* ptr = malloc(size);

if (strcmp(encoding, @encode(int)) == 0) {
    *(int*)ptr += 2;
} else if (strcmp(encoding, @encode(float)) == 0) {
    *(float*)ptr += 2.0;
}

free(ptr);

答案 2 :(得分:-1)

嗯,是啊..当然, ......

           int five = 5;
__typeof(five) four = 4;

printf("@encode(int):%s\n", @encode(int));
printf("typeof(five):%s\n", @encode(__typeof(five)));
printf("typeof(four):%s\n", @encode(__typeof(four)));

  

@encode(int):i

     

typeof(five):i

     

typeof(four):i