【iOS】数据持久化

来源:互联网 发布:elasticsearch5 linux 编辑:程序博客网 时间:2024/06/07 22:36

“数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、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
    这个朕暂时没注意,到了再补。
0 0