#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