使用NSMethodSignature我可以通过getArgumentTypeAtIndex获取方法参数类型:它返回一个基于this documentation.的c-string,所以像“i”表示int,“I”表示unsigned。
是否有某个函数接受此编码并以字节为单位返回类型大小?
这样的事情:
int paramSize = typeEncodingSize("i");
NSLog(@"%s is %d bytes", "i", paramSize);
//this would be the encoding for a struct that has three fields. An id, a pointer and an int.
paramSize = typeEncodingSize("{example=@*i}"); //two 8 byte pointers & one 4 byte int
NSLog(@"%s is %d bytes", "{example=@*i}", paramSize);
which would output:
i is 4 bytes
{example=@*i} is 20 bytes
我认为自docs for [NSInvocation setArgument:atIndex:]说
以来必须有一个api函数复制的字节数由参数大小决定。
答案 0 :(得分:0)
你试过sizeof()
吗?这是确定结构或其他类型大小的常用方法。
答案 1 :(得分:0)
Caleb的sizeof()
是正确的,因为基本上只有当@encode
接受sizeof()
时,您才能将任何内容传递给@decode
。比如CDTypeParser.m
。您可以下载class-dump源代码并查看{{1}}文件,例如如何解析它。
答案 2 :(得分:0)
我知道这已经过时了,但我已经撞到了同一堵墙。
解决方案似乎是方法NSGetSizeAndAlignment
。