国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

OC反射機制獲得該類全部屬性并創建數據表

2019-11-14 20:01:06
字體:
來源:轉載
供稿:網友

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的語言。

這里講反射, 主要是給大家講一下這一種思路。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 谢通门县| 屏东市| 新干县| 综艺| 铜陵市| 义乌市| 连州市| 惠东县| 潼南县| 林州市| 乐山市| 哈巴河县| 青岛市| 松阳县| 滦平县| 甘谷县| 苍梧县| 娱乐| 宜城市| 清流县| 伊吾县| 嵊泗县| 濮阳市| 日照市| 东莞市| 济南市| 金坛市| 宜兴市| 友谊县| 昌图县| 睢宁县| 化州市| 石城县| 巴林左旗| 北宁市| 定安县| 申扎县| 沙湾县| 定兴县| 灵石县| 新民市|