RunTime 获取对象属性和方法
来源:互联网 发布:数据库物理层 编辑:程序博客网 时间:2024/06/05 00:13
RunTime中的效果感觉和Java中的反射差不多,在动态也就是在代码运行的时候来获取这个对象的属性和方法。 在对数据库的写法上面可以用到,如:需要写SQL语句和对象的对应的时候, 可以用这种形式来进行封装,这样的话, 通过一个类能处理好项目中的SQL的创建或者查询等操作。 一些高层的封装上面也需要用到。 简单的获取属性和方法的如下代码:
#import <Foundation/Foundation.h>@interface Student : NSObject@property(nonatomic,assign)NSString *userName;@property(nonatomic,assign)NSString *sex;@property(nonatomic)NSInteger age;- (void)happy:(NSString *)happyName;- (void)readBook;@end
#import "Student.h"@implementation Student- (void)happy:(NSString *)happyName{ NSLog(@"爱好打-->%@",happyName);}- (void)readBook{ NSLog(@"文学小说");}
获取类如下:
#import <Foundation/Foundation.h>@interface EntityTools : NSObject- (void)gainParmers:(NSString *)className;@end
#import "EntityTools.h"#import <objc/runtime.h>@implementation EntityTools#pragma mark 获取 属性, 方法, 相当于java中的反射- (void)gainParmers:(NSString *)className{ Class classEntity = NSClassFromString(className); NSObject *stu = [[classEntity alloc] init]; unsigned int count; // 获取属性列表 objc_property_t *propertyList = class_copyPropertyList([stu class], &count); for (unsigned int i = 0; i<count; i++) { const char *propertyName = property_getName(propertyList[i]); NSLog(@"property----="">%@", [NSString stringWithUTF8String:propertyName]); } // 获取方法 Method *methodList = class_copyMethodList([stu class], &count); for (unsigned int i = 0; i<count; i++) { Method method = methodList[i]; SEL sel = method_getName(method); NSString *methodName = NSStringFromSelector(sel); if ([methodName isEqualToString:@"readBook"]) { NSLog(@"method---->%@", methodName); [stu performSelector:sel]; }else if([methodName isEqualToString:@"happy:"]){ NSLog(@"method---->%@", methodName); [stu performSelector:sel withObject:@"篮球"]; } }}
调用:
#import <Foundation/Foundation.h>#import "EntityTools.h"#import "Student.h"int main(int argc, const char * argv[]) { @autoreleasepool { [[[EntityTools alloc]init] gainParmers:@"Student"]; } return 0;}
运行结果如下:
2015-11-03 16:55:17.277 RunTime学习[3555:1330871] property----=>userName2015-11-03 16:55:17.278 RunTime学习[3555:1330871] property----=>sex2015-11-03 16:55:17.278 RunTime学习[3555:1330871] property----=>age2015-11-03 16:55:17.278 RunTime学习[3555:1330871] method---->happy:2015-11-03 16:55:17.278 RunTime学习[3555:1330871] 爱好打-->篮球2015-11-03 16:55:17.278 RunTime学习[3555:1330871] method---->readBook2015-11-03 16:55:17.279 RunTime学习[3555:1330871] 文学小说Program ended with exit code: 0
0 0
- RunTime 获取对象属性和方法
- runtime获取对象属性及方法列表
- Runtime获取类属性列表和方法列表
- OC 的 Runtime 动态获取对象属性
- Runtime获取对象隐藏的属性
- iOS运行时runtime获取私有属性和强制更改私有属性,以及获取私有方法
- 如何获取对象的属性和方法
- JavaScript 获取对象属性和方法
- JavaScript 获取对象属性和方法
- FMDB封装,用OC方法存储model,不用写SQL语句。使用runtime获取对象属性
- runtime实际应用(1)- 获取对象属性及方法列表
- Runtime的使用4 【获取属性和方法(包括私有)】
- RunTime应用--获取类中所有的私有变量,属性,和方法
- 获取com对象的所有属性和方法
- js获取对象的所有属性和方法
- Python:动态获取对象的属性和方法
- JS获取对象所有的属性和方法
- js获取对象的所有属性和方法
- java多线程
- JAVA编程思想 初学者 访问权限控制6
- 理解LInux路由
- servlet中的数据能与jsp共享吗?如果可以如何传递
- PostgreSQL在CentOS下的源码安装
- RunTime 获取对象属性和方法
- JBPM4中常用概念总结
- 测试团队的工作模式
- 公共技术点之面向对象六大原则
- hadoop2.6.0下打包mahout调用数据模型程序 运行时报错
- C++ primer 学习笔记——字符串
- json移植到ARM板
- c# 同步功能的环形缓存区ReadWrite RingBuffer
- uploadify java上传不提交到后台报错HTTP Error (404)或IO Error