4

NSMethodSignature を使用すると、getArgumentTypeAtIndex: を介してメソッドの引数の型を取得できます。このドキュメントに基づいて c-string を返します。int の場合は "i"、unsigned の場合は "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

[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

Calebは正しいです。基本的には、にも受け入れられる場合sizeof()にのみ、何でも渡すことができるからです。のようなものはありません。クラスダンプのソース コードをダウンロードして、ファイルの解析方法などを調べることができます。@encodesizeof()@decodeCDTypeParser.m

于 2012-08-31T10:39:15.857 に答える