【iOS】数据持久化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值