iOS 数据存储

来源:互联网 发布:绿巨人 知乎 编辑:程序博客网 时间:2024/06/04 18:27

1、属性列表

路径:

NSArray * testPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *filePath = [paths objectAtIndex:0];    NSString *fileName = [fileName stringByAppendingPathComponent:@"test.plist"];

写:

NSArray *writtenList = [[NSArray alloc] init];[writtenList writeToFile:fileName atomically:YES];

读:

[writtenList writeToFile:fileName atomically:YES];NSArray *readList = [[NSArray alloc] initWithContentsOfFile:fileName];


2、归档

读:

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:fileName];     NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];          TestObj *tObj = [unarchiver decodeObjectForKey:@"testKey"];     [unarchiver finishDecoding];

写:

//overwrite- (void)encodeWithCoder:(NSCoder *)aCoder {}-(id) initWithCoder:(NSCoder *)aDecoder { }

NSMutableData *data = [[NSMutableData alloc] init];NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:tObj forKey:@"testKey"];[archiver finishEncoding];[data writeToFile:fileName atomically:YES];

3、数据库sql

//数据库操作sqlite3 *database;// const NSString * dbname = @"mydb"int result;//打开一个指定路径的现有的数据库,如果没有则会新建一个db库result =  sqlite3_open([myFile UTF8String], &database);if (result != SQLITE_OK) {    sqlite3_close(database);}    //创建一个db表char *errorMsg;NSString *sql_create_table = @"CREATE TABLE IF NOT EXISTS NONOTABLE 省略~~~~~~~~~~~~~";int result1 ;//sqlite_exec用了针对sqlite3运行任何不要返回数据的命令,它用于执行更新,插入和删除。简单来说,这个方法执行的都是一些无需返回数据(虽然我们可能获取一个状态值。)。result1 = sqlite3_exec(database, [sql_create_table UTF8String], NULL, NULL, &errorMsg);    //检索查询操作int result2 ;sqlite3_stmt *statment;NSString *sql_selected = @"查询语句";result2 = sqlite3_prepare_v2(database, [sql_selected UTF8String], -1, &statment, nil);if(result2 == SQLITE_OK){    //单步操作    while (sqlite3_step(statment) == SQLITE_ROW) {    int row = sqlite3_column_int(statment, 0);    char * rpwData = sqlite3_column_text(statment, 1);      }    sqlite3_finalize(statment);}    //绑定变量,既就是插入操作的一种变种,比如我么那上面提到sqlite_exec可以执行插入操作,插入内容直接是写在sql字窜里,但是考虑到字窜涉及到无效的符号以及会一些严重的注入漏洞(比如以前听过的引号符号)。NSString *sql_bind = @"insert into foo value(?,?)";result2 = sqlite3_prepare_v2(database, [sql_selected UTF8String], -1, &statment, nil);if(result2 == SQLITE_OK){    sqlite3_bind_int(statment, 1, 235);    sqlite3_bind_text(statment, 2, "test", -1, nil);    sqlite3_finalize(statment);}if (sqlite3_step(statment) != SQLITE_DONE)NSLog(@"error");sqlite3_finalize(statment);sqlite3_close(database);

4、coreData