概述
2.plist属性列表 (适合简单数据类型,比如说一些配置信息之类的)
这种可以使用NSArrary, NSDictionary等这些工具类直接写入文件
使用 arrayWithContentsOfFile:(NSString *)aPath 来从文件获取数据
使用 writeToFile:atomically: 来把数据写入文件
3.归档 (经过加密的保存数据方式,也是以键值对形式保存读取的.)
例: 所有归档对象必须支持NSCoding协议 和 NSCopying(支持对象复制)
//写入归档文件
NSArray *list = @[[NSArray allc] initWithObjects:@"one", @"two", nil];
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:list forKey:@"keyValue"];
[archiver finishEncoding];
BOOL success = [data writeToFile:@"/path/to/archive" atomically:YES];
//成功返回YES
//读取归档文件
NSArray *list = nil;
NSData *data = [[NSData alloc] initWithContentsOfFile:@"/path/to/archive"];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
list = [unarchiver decodeObjectForKey:@"keyValue"];
[unarchiver finishDecoding];
//至此已经完成
4.SQLite3 这是一个小型的数据库 (支持复杂的数据查询和存储)
使用前得引入动态库 libsqlite3.dylib, 使用过程中的字符串类型必须是标准C字符串.
sqlite3_open() //用来打开数据库
sqlite3_prepare_v2() //操作数据库前的准备
sqlite3_step() //分步查询或者执行
sqlite3_column() //查询过后获取列值
sqlite3_bind_*() //当你想要插入或者更新数据时来绑定的内容
sqlite3——reset() //重置这个语句,回到重新绑定的状态
sqlite3_finalize() //销毁这个对象
sqlite3_close() //关闭数据库
sqlite3_exec是sqlite3_prepare_v2,sqlite3_step()和sqlite3_finalize()的封装,能让程序多次执行sql语句而不要写许多重复的代码。
Sqlite3_exec接口执行0或多个UTF-8编码的,分号分割的sql语句,传到第二个参数中。如果sqlite3_exec的第三个参数回调函数指针不为空,那么它会为每个来自执行的SQL语句的结果行调用(也就是说回调函数会调用多次,上面例子中会返回2个结果行,因而会被执行2次),第4个参数是传给回调函数的第一个参数,如果回调函数指针为空,那么回调不会发生同时结果行被忽略。
如果在执行sql语句中有错误发生,那么当前的语句的执行被停止,后续的语句也被跳过。第五个参数不为空的时候,它被分配内存并写入了错误信息,所以在sqlite3_exec后面需要调用sqlite3_free去释放这个对象以防止内存泄露
回调函数:
int (*callback)(void*,int,char**,char**), /* Callback function */
第一个参数通过sqlite3_exec的第第四个参数传入的
第二个参数是结果行的列数
第三个参数是行中列数据的指针
第四个参数是行中列名称的指针
查询数据
int sqlite3_get_table(sqlite3*, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg );
第1个参数是前面open函数得到的指针。
第2个参数const char *sql是一条 sql语句,以