码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-03 20:50:35      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   ar   for   文件   数据   sp   

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

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

 1 - (BOOL) createTableByClassAttributes: (id)classModel {
 2     
 3     // 得到类名 当表名、  也为了下边的反射、
 4     NSString *className = NSStringFromClass([classModel class]);
 5     
 6     // 初始化一个装sql的可变string
 7     NSMutableString * sqlQuery = [NSMutableString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (", className];
 8     
 9     const char * cClassName = [className UTF8String];
10     
11     id classM = objc_getClass(cClassName);
12     // i 计数 、  outCount 放我们的属性个数
13     unsigned int outCount, i;
14     // 反射得到属性的个数 、
15     objc_property_t * properties = class_copyPropertyList(classM, &outCount);
16     
17     // 循环 得到属性名称  拼接数据库语句
18     for (i = 0; i < outCount; i++) {
19         objc_property_t property = properties[i];
20         // 获得属性名称
21         NSString * attributeName = [NSString stringWithUTF8String:property_getName(property)];
22         
23         if (i == outCount - 1) {
24             [sqlQuery appendFormat:@"%@ TEXT)", attributeName];
25             break;
26         }
27         // 开始做拼接
28         [sqlQuery appendFormat:@"%@ TEXT, ", attributeName];
29     }
30     
31     if ([self openDatabase] == YES) {
32         
33         char * error;
34         int result = sqlite3_exec(_db, [sqlQuery UTF8String], NULL, NULL, &error);
35         if (result == SQLITE_OK) {
36             return YES;
37         } else {
38             NSLog(@"%@", [self errorWithMessage:[NSString stringWithFormat:@"%s", error]]);
39             return NO;
40         }
41     } else {
42         NSLog(@"%@", [self errorWithMessage:@"openDB Failure"]);
43         return NO;
44     }
45 }

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

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

这里用的是纯c的语言。

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

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

标签:style   blog   color   使用   ar   for   文件   数据   sp   

原文地址:http://www.cnblogs.com/Dylam/p/Dylan.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!