#import <objc/runtime.h>
#import <dlfcn.h>
#import <mach-o/ldsyms.h>
1、获取当前app运行过程中,由开发者创建的类的列表
static void tt_print_dev_classes() {
unsigned int count;
const char **classes;
Dl_info info;
dladdr(&_mh_execute_header, &info);
classes = objc_copyClassNamesForImage(info.dli_fname, &count);
for (int i = 0; i < count; i++) {
NSString *className = [NSString stringWithCString:classes[i] encoding:NSUTF8StringEncoding];
Class class = NSClassFromString(className);
NSLog(@"class name = %@", class);
}
}
2、获取当前app运行时所用到所有的文件,包括系统创建的类和开发者创建的类的列表
static void tt_print_app_classes() {
int numClasses;
Class * classes = NULL;
numClasses = objc_getClassList(NULL, 0);
if (numClasses > 0 ) {
classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
for (int i = 0; i < numClasses; i++) {
Class class = classes[i];
const char *className = class_getName(class);
NSLog(@"class name2 = %s", className);
}
free(classes);
}
}
3、获取当前类的所有方法、属性与协议列表
static void tt_print_clz_info(Class clz) {
unsigned int count = 0;
objc_property_t *propertyList = class_copyPropertyList(clz, &count);
for (unsigned int i = 0; i < count; i++) {
const char *propertyName = property_getName(propertyList[i]);
NSLog(@"property ="
">%@",
[NSString stringWithUTF8String:propertyName]);
}
free(propertyList);
Method *methodList = class_copyMethodList(clz, &count);
for (unsigned int i = 0; i < count; i++) {
Method method = methodList[i];
NSLog(@"method ="
">%@",
NSStringFromSelector(method_getName(method)));
}
free(methodList);
Ivar *ivarList = class_copyIvarList(clz, &count);
for (unsigned int i = 0; i < count; i++) {
Ivar myIvar = ivarList[i];
const char *ivarName = ivar_getName(myIvar);
NSLog(@"ivar ="
">%@",
[NSString stringWithUTF8String:ivarName]);
}
free(ivarList);
__unsafe_unretained Protocol **protocolList = class_copyProtocolList(clz, &count);
for (unsigned int i = 0; i<count; i++) {
Protocol *myProtocal = protocolList[i];
const char *protocolName = protocol_getName(myProtocal);
NSLog(@"protocol ="">%@", [NSString stringWithUTF8String:protocolName]);
}
free(protocolList);
}