/usr/include/objc/objc-class.h に必要な関数宣言がある。
- (void)doReflectionForClass:(Class)aClass {
void *iterator = NULL;
struct objc_method_list *methodList;
while (methodList = class_nextMethodList(aClass, &iterator)) {
for (int i = 0; i < methodList->method_count; i++) {
SEL selector = methodList->method_listi.method_name;
NSLog(@"Selector: %@", NSStringFromSelector(selector));
}
}
}
ちなみに、変数は構造体のメンバとして管理されているらしく、取得するのは無理っぽい。というのはウソで、Class(構造体?)がちゃんと保持しているらしい。
struct objc_ivar_list *ivars = aClass->ivars;
if (ivars) {
for (int i = 0; i < ivars->ivar_count; i++) {
Ivar ivar = ((struct objc_ivar_list *) ivars->ivar_list)i;
char *name = ivar->ivar_name;
char *type = ivar->ivar_type;
int offset = ivar->ivar_offset;
}
}
コメントを書く