“数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。” —— [ 百度百科 ]
数据持久化简单说就是把数据,转换为可见的存储模型存储下来。这类存储模型常见的有数据库、XML、File等文件。在iOS中常用的有四种数据持久化方法:1)KVC格式的轻量级本地数据存储NSUserDefault;2)转成二进制文件存入本地;3)SQLite数据库;4)Core Data。
我比较熟的是前三个,第四个没注意特别过,就不多做介绍了(前三个看博文还不明白的欢迎留言)。
- NSUserDefault
优点:KVC格式、默认存储沙盒读取方便;
缺点:支持数据类型较少:NSNumber(Integer、Float、Double)、NSString、NSData、NSArray、NSDictionary、BOOL。
eg:
//增、改
[[NSUserDefaults standardUserDefaults] setObject:self.userName forKey:UserDefault_userName];
[[NSUserDefaults standardUserDefaults] setObject:self.password forKey:UserDefault_passWord];[[NSUserDefaults standardUserDefaults] setObject:self.userCode forKey:UserDefault_userCode];
[[NSUserDefaults standardUserDefaults] synchronize];
//查
[[NSUserDefaults standardUserDefaults] objectForKey:UserDefault_userName];
[[NSUserDefaults standardUserDefaults] objectForKey:UserDefault_passWord];
[[NSUserDefaults standardUserDefaults] objectForKey:UserDefault_userCode];
//删除
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults removeObjectForKey:UserDefault_userName];
[userDefaults removeObjectForKey:UserDefault_passWord];
[userDefaults removeObjectForKey:UserDefault_userCode];
- 文件存储
其实相交于第一个多了一步本地存取的过程。
支持的类型也广泛了不少,图片、XML、二进制流等均可;
eg:
//存储图片writeToFile
[UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
//获取图片
UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, extension]];
- SQLite
就是一个简单的数据库,在第二者本地存储的基础上,用一些sql语法。
只要sql学的好,啥数据库都难不倒,不懂的时候乱七八糟,无非是增删改差。
SQLite搭配FMDB使用更佳。
eg:
#pragma —AppDelegate建立数据库
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *document = [pathArray lastObject];
NSString *filePath = [document stringByAppendingPathComponent:@"database.db"];
// NSLog(@"数据库路径:%@", filePath);
db = [FMDatabase databaseWithPath:filePath];
if (![fileManager fileExistsAtPath:filePath]) {
// NSLog(@"数据库不存在,正在创建...");
if ([db open]) {
// NSLog(@"打开成功,开始创建表结构...");
NSString *sql = nil;
sql = [t_User createTable];
[db executeUpdate:sql];
sql = nil;
[db close];
}
}
#pragma —界面使用
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSString *sql = [NSString stringWithFormat:@"UPDATE t_user SET portrait='%@' WHERE loginName='%@'", image, name]; //此处增删改查的sql语句
NSLog(@"%@", sql);
BOOL result = [delegate.db executeUpdate:sql];
if (result) {
NSLog(@"头像图片名称存储成功");
}
- Core Data
这个朕暂时没注意,到了再补。