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 回答