使用 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:]的文档说
复制的字节数由参数大小决定。