23 class introspection objective-c objective-c-runtime
如果我有一个类,我怎么能列出它的所有实例变量名?
例如:
@interface MyClass : NSObject {
int myInt;
NSString* myString;
NSMutableArray* myArray;
}
Run Code Online (Sandbox Code Playgroud)
我想得到"myInt","myString"和"myArray".有没有办法可以得到一个我可以迭代的名字数组?
我已经尝试过搜索Objective-C文档但找不到任何东西(我也不确定这是什么).
jha*_*erg 42
如上所述,您可以使用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);
Run Code Online (Sandbox Code Playgroud)
#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);
Run Code Online (Sandbox Code Playgroud)