1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | // //? NSObject+SA.m // // //? Created by yusian on 15-3-16. //? Copyright (c) 2015年 Sian. All rights reserved. // ? #import "NSObject+SA.h" #import <objc/runtime.h> ? @implementation NSObject (SA) ? /* 获取对象的所有属性,不包括属性值 */ - (NSArray *)getAllProperties { ????u_int count; ????objc_property_t *properties? =class_copyPropertyList([self class], &count); ????NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count]; ????for (int i = 0; i<count; i++) ????{ ????????const char* propertyName =property_getName(properties[i]); ????????[propertiesArray addObject: [NSString stringWithUTF8String: propertyName]]; ????} ????free(properties); ????return propertiesArray; } ? /* 获取对象的所有属性 以及属性值 */ - (NSDictionary *)getAllPropertiesAndValues { ????NSMutableDictionary *props = [NSMutableDictionary dictionary]; ????unsigned int outCount, i; ????objc_property_t *properties = class_copyPropertyList([self class], &outCount); ????for (i = 0; i<outCount; i++) ????{ ????????objc_property_t property = properties[i]; ????????const char* char_f =property_getName(property); ????????NSString *propertyName = [NSString stringWithUTF8String:char_f]; ????????id propertyValue = [self valueForKey:(NSString *)propertyName]; ????????if (propertyValue) [props setObject:propertyValue forKey:propertyName]; ????} ????free(properties); ????return props; } ? /* 获取对象的所有方法 */ -(void)printMothList { ????unsigned int mothCout_f =0; ????Method* mothList_f = class_copyMethodList([self class],&mothCout_f); ????for(int i=0;i<mothCout_f;i++) ????{ ????????Method temp_f = mothList_f[i]; //??????? IMP imp_f = method_getImplementation(temp_f); //??????? SEL name_f = method_getName(temp_f); ????????const char* name_s =sel_getName(method_getName(temp_f)); ????????int arguments = method_getNumberOfArguments(temp_f); ????????const char* encoding =method_getTypeEncoding(temp_f); ????????SALog(@"方法名:%@,参数个数:%d,编码方式:%@",[NSString stringWithUTF8String:name_s], ??????????????arguments,[NSString stringWithUTF8String:encoding]); ????} ????free(mothList_f); } ? @end |
如何遍历对象的方法、属性及对应值
Leave a reply