4

使用 NSMethodSignature 我可以通过 getArgumentTypeAtIndex: 获取方法参数类型。它根据本文档返回一个 c 字符串。所以就像“i”代表int,“I”代表无符号。

是否有一个函数可以接受这种编码并以字节为单位返回类型大小?

像这样的东西:

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

我认为在某个地方必须有一个 api 函数,因为[NSInvocation setArgument:atIndex:]的文档说

复制的字节数由参数大小决定。

4

3 回答 3

1

我知道这很旧,但我遇到了同样的问题。

解决方案似乎是 method NSGetSizeAndAlignment

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/#//apple_ref/c/func/NSGetSizeAndAlignment

于 2016-05-15T20:51:00.930 回答
0

你试过sizeof()吗?这是确定结构或其他类型大小的常用方法。

于 2012-08-31T07:19:27.867 回答
0

Calebsizeof()是正确的,因为基本上你可以将任何东西传递给@encode只有当它也被 . 接受时sizeof()。没有什么像@decode. 您可以下载类转储源代码并查看CDTypeParser.m文件,例如如何解析它。

于 2012-08-31T10:39:15.857 回答