runtime获取对象属性及方法列表
2016-05-10 17:00
501 查看
创建NSObject的类目,引入runtime
.m文件
#import <objc/runtime.h>
.m文件
/** * 获取所有属性及对应的值 * */ -(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; } /** * 获取对象的所有属性 * * @return 属性数组 */ - (NSArray *)getAllProperties { unsigned int count; //获取属性的链表 objc_property_t *properties =class_copyPropertyList([self class], &count); NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count]; for (int i = 0; i < count ; i++) { objc_property_t property = properties[i]; const char* propertyName =property_getName(property); [propertiesArray addObject: [NSString stringWithUTF8String:propertyName]]; } free(properties); return propertiesArray; } /** * 获取对象的所有方法 */ -(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; }
相关文章推荐
- geotrellis使用(五)使用scala操作Accumulo
- tuzicms 2.5 zend环境检测提示未安装,无法下一步安装程序
- 配置Nginx+PHP的正确思路与过程
- 数据仓库中的SQL性能优化 - Hive篇
- Sql server 中暂停与恢复主键自增
- 不带MASTER_LOG_FILE,MASTER_LOG_POS参数,执行change master 语句复制异常
- jQuery Mobile 列表
- 原型模式--prototype
- 从零开始,打造自己的首个 iOS 框架
- 联合查询 thinkPHP
- 详解原生JavaScript实现jQuery中AJAX处理的方法
- red5源码分析---9
- 非实时系统精确定时器的实现
- 建议性锁和强制性锁机制下的锁
- Excel导入导出
- 我的数组类
- 网站性能优化
- 常见布局
- 深入浅出Koa
- flexbox布局