24

クラスがある場合、そのすべてのインスタンス変数名を一覧表示するにはどうすればよいですか?

例えば:

@interface MyClass : NSObject {
    int myInt;
    NSString* myString;
    NSMutableArray* myArray;
}

「myInt」、「myString」、および「myArray」を取得したいと思います。繰り返し処理できる名前の配列を取得する方法はありますか?

Objective-C のドキュメントを検索してみましたが、何も見つかりませんでした (これが何と呼ばれているのかもわかりません)。

4

3 に答える 3

43

前述のように、Objective-C ランタイム API を使用してインスタンス変数名を取得できます。

unsigned int varCount;

Ivar *vars = class_copyIvarList([MyClass class], &varCount);

for (int i = 0; i < varCount; i++) {
    Ivar var = vars[i];

    const char* name = ivar_getName(var);
    const char* typeEncoding = ivar_getTypeEncoding(var);

    // do what you wish with the name and type here
}

free(vars);
于 2009-07-31T17:59:40.343 に答える
5
#import <objc/runtime.h>


NSUInteger count;
Ivar *vars = class_copyIvarList([self class], &count);
for (NSUInteger i=0; i<count; i++) {
    Ivar var = vars[i];
    NSLog(@"%s %s", ivar_getName(var), ivar_getTypeEncoding(var));
}
free(vars);
于 2013-04-10T13:37:49.587 に答える
0

を考えてみましょうgen_bridge_metadata。これはまったく別の目的を意図していますが、Objective-C ヘッダー ファイルから XML ファイルを生成できます。

于 2009-07-31T17:54:15.203 に答える