#import "NSObject+object_runtime.h"#import <objc/runtime.h>@implementation NSObject (object_runtime)/** 获取对象的属性和属性值字典 */- (NSDictionary*)objectGetPropertyKeysValues{ NSMutableDictionary* dic = [NSMutableDictionary dictionary]; unsigned int count; objc_property_t * prop_list = class_copyPropertyList([self class], &count); for (int i=0; i<count; i++) { objc_property_t prop = prop_list[i]; const char * prop_name = property_getName(prop); NSString* propName = [NSString stringWithUTF8String:prop_name]; id propVal = [self valueForKey:propName]; if (propVal) { [dic setObject:propVal forKey:propName]; } else { [dic setObject:[NSNull null] forKey:propName]; } } free(prop_list); return dic;} /** 获取类的属性列表 */+ (NSArray*)classGetPropertyList{ unsigned int count; objc_property_t * prop_list = class_copyPropertyList([self class], &count); NSMutableArray * propsArr = [NSMutableArray arrayWithCapacity:count]; for (int i=0; i<count; i++) { objc_property_t prop = prop_list[i]; const char * prop_name = property_getName(prop); NSString* propName = [NSString stringWithUTF8String:prop_name]; [propsArr addObject:propName]; } free(prop_list); return propsArr;}/** 获取类的办法列表 */+ (NSArray*)classGetMethodList{ unsigned int count; Method * method_list = class_copyMethodList([self class], &count); NSMutableArray * array = [NSMutableArray arrayWithCapacity:count]; for (int i = 0; i<count; i++) { Method m = method_list[i]; const char * name = sel_getName(method_getName(m)); //IMP imp = method_getImplementation(m); //int args = method_getNumberOfArguments(m); //const char * encoding = method_getTypeEncoding(m); [array addObject:[NSString stringWithUTF8String:name]]; } free(method_list); return array;}@end