OC反射机制获得该类全部属性并创建数据表

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1. 首先我们要知道,这使用的是运行时的反射机制

所以我们需要头文件 runtime.h

1- (BOOL) createTableByClassAttributes: (id)classModel {23//得到类名 当表名、 也为了下边的反射、4NSString *className = NSStringFromClass([classModelclass]);56//初始化一个装sql的可变string7NSMutableString * sqlQuery = [NSMutableString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (", className];89constchar* cClassName =[className UTF8String];1011idclassM =objc_getClass(cClassName);12//i 计数 、 outCount 放我们的属性个数13unsignedintoutCount, i;14//反射得到属性的个数 、15objc_PRoperty_t * properties = class_copyPropertyList(classM, &outCount);1617//循环 得到属性名称 拼接数据库语句18for(i =0; i < outCount; i++) {19objc_property_t property =properties[i];20//获得属性名称21NSString * attributeName =[NSString stringWithUTF8String:property_getName(property)];2223if(i == outCount -1) {24[sqlQuery appendFormat:@"%@ TEXT)", attributeName];25

break;26}27//开始做拼接28[sqlQuery appendFormat:@"%@ TEXT,", attributeName];29}3031if([self openDatabase] ==YES) {3233char*error;34intresult = sqlite3_exec(_db, [sqlQuery UTF8String], NULL, NULL, &error);35if(result ==SQLITE_OK) {36returnYES;37}else{38NSLog(@"%@", [self errorWithMessage:[NSString stringWithFormat:@"%s", error]]);39returnNO;40}41}else{42NSLog(@"%@", [self errorWithMessage:@"openDB Failure"]);43returnNO;44}45}

// 当然 这是在数据库中写的, 你可能需要导入libsqlite这个库并创建数据库才能看见他的真正效果

ps: 运行时,我们可以得到某个类的全部属性,包括属性名称,值, 类型, 同事也可以得到方法的名称。

这里用的是纯c的语言。

这里讲反射, 主要是给大家讲一下这一种思路。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航