runtime实际应用(1)- 获取对象属性及方法列表
2017-11-17 17:18
531 查看
创建NSObject的类目,引入runtime
#import <objc/runtime.h>
1、获取所有的属性及对应的值
-(NSDictionary *)getAllPropertiesAndValues{ NSMutableDictionary *props = [NSMutableDictionary dictionary]; unsigned int outCount; //属性的链表 objc_property_t *properties =class_copyPropertyList([self class], &outCount); //遍历链表 for (int i = 0; i<outCount; i++) { objc_property_t property = properties[i]; //获取属性字符串 const char* propertyName =property_getName(property); //转换成NSString NSString *key = [NSString stringWithUTF8String:propertyName]; //获取属性对应的value id value = [self valueForKey:key]; if (value) { [props setObject:value forKey:key]; } } //释放结构体数组内存 free(properties); return props; }
2、获取对象的所有方法
-(NSArray *)getAllMethods { unsigned int count_f =0; //获取方法链表 Method* methodList_f = class_copyMethodList([self class],&count_f); NSMutableArray *methodsArray = [NSMutableArray arrayWithCapacity:count_f]; for(int i=0;i<count_f;i++) { Method temp_f = methodList_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); NSLog(@"方法名:%@,参数个数:%d,编码方式:%@",[NSString stringWithUTF8String:name_s], arguments,[NSString stringWithUTF8String:encoding]); NSString *methodStr = NSStringFromSelector(name_f); [methodsArray addObject:methodStr]; } free(methodList_f); return methodsArray; }
相关文章推荐
- runtime获取对象属性及方法列表
- runtime查看对象的属性列表、方法列表
- RunTime 获取对象属性和方法
- Runtime获取类属性列表和方法列表
- runtime获取属性列表,修改属性值,添加并修改私有方法的调用
- Runtime获取类的属性列表和方法列表
- RunTime应用--获取类中所有的私有变量,属性,和方法
- iOS - Runtime 获取属性列表 方法列表 成员变量列表 协议列表
- FMDB封装,用OC方法存储model,不用写SQL语句。使用runtime获取对象属性
- JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法
- 获取对象的类名,属性及方法列表
- PHP获取类对象方法、属性、常量列表!
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- 测试 java反射Reflection中 获取 类属性、方法、构造方法及 调用类方法改变 对象属性
- 获取应用列表,打开应用,打开应用程序属性
- Rtti单元(1)获取类的方法、属性、字段的列表
- C#反射新建类实例和调用类方法及属性帮助类 以及获取或设置对象属性中字段值帮助类
- location对象的属性和方法应用(解析URL)
- C#反射实例——获取及设置对象属性,运行对象方法
- 获取对象属性值的方法