iOS简单的数据持久化

首先,我们要了解: 什么是数据持久化?  我们为什么要做数据持久化?

数据持久化就是数据的永久存储. 我们在写demo或则是初学的时候, 很多的数据都是在AppDelegate.m中或者是在视图控制器中定义好了的. 然后我们会发现: 程序或demo每一次执行的时候都是初始化数据. 当我们需要深入研究数据时, 就需要数据的持久化.

iOS中常用的数据持久化方法有四种: 属性列表, 对象归档, SQLite, CoreData.

当程序执行后, 数据是存储在内存中的, 当程序关闭后, 内存会释放掉, 从而这些数据也会丢失. 因为这些数据都是临时的.

打个比方: 临时数据相当于是公司的车, 在需要你开车去办工的时候给你用一下, 用完了就要马上还回去. 而永久性的数据相当于你自己的车, 想怎么开怎么开.(ps:当然还是要遵守交通规则的).

数据持久化的本质其实就是将数据保存成文件, 存储到程序的沙盒中.

NSString *sandboxPath =NSHomeDirectory();//获取当前应用程序的沙盒主路径

NSString *tmpPath =NSTemporaryDirectory();//获取临时文件夹路径

NSString *docPath1 = [sandboxPathstringByAppendingPathComponent:@"Documents"];//因为沙盒文件夹中包含有三个文件, 在这里拼接Documents直接指向存储用户数据的Documents文件夹.

现在我们可以获取到具体的Documents文件夹路径了

 NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);//通过路径搜索函数获取对应的Documents文件夹路径(ps:注意提示, 不要写成NSDocumentationDirectory)

这里有三个参数. 第一个参数是: 被搜索的文件夹目录的枚举值.  第二个参数是: 被搜索的域(ps:iOS开发只有NSUserDomainMask可用).  第三个参数是: 是否显示完整路径, 这是一个BOOL值, YES表示返回完整路径, 如果写的是NO得话返回的是:"~/Documents".因为每一个沙盒路径中都有一个Documents文件夹, 所以我们需要用完整路径.

NSString *documentsPath = paths.firstObject;

NSString *textPath = [documentsPath stringByAppendingPathComponent:@"text.tex"];//生成文本文件的存储路径

NSString *string = @"好想养一只二哈~!";//创建需要被保存的字符串对象

[string writeToFile:textPath atomically:YES encoding:NSUTF8StringEncodingerror:nil];//将字符串写入对应路径的文件

运行程序后, 会将字符串添加到命名为text的.txt文件中, 因为没有text.txt, 所以会创建一个text.txt文件.

同理,我们可以对NSArray, NSDictionary, NSData等类及其子类的对象写入到指定路径的文件. 文件的类型可以是多种. 在这里比较多用的是XML(可扩展标记语言)



//指定数组的文件存储路径

    NSString *arrayPath = [documentsPath stringByAppendingPathComponent:@"array.plist"];

    NSArray *array = @[@"Duke", @"Douglas", @"Leo"];

    //调用数组的writeToFile:atomically:方法将数组内容写入到文件中

    [array writeToFile:arrayPath atomically:YES];

    //定义一个字典的文件存储路径

    NSString *dicPath = [documentsPath stringByAppendingPathComponent:@"dic.plist"];

    //创建字典对象

    NSDictionary *dic = @{@"name":@"Linda",@"age":@30,@"gender":@"f"};

    //调用字典中定义的实例方法writeToFile:atomically:将字典的内容写入到对应路径的文件中

    [dic writeToFile:dicPath atomically:YES];

 UIImage *image = [UIImage imageNamed:@"image"];

    NSData *imageData = UIImageJPEGRepresentation(image, 0.2);//<#CGFloat compressionQuality#>0~1 代表了压缩百分比

    NSString *imagePath =  [documentsPath stringByAppendingPathComponent:@"image.jpg"];

    //将二进制字节流对象写入到文件中

    [imageData writeToFile:imagePath atomically:YES];



对于复杂的对象无法通过writeToFile:方法进行数据持久化. 我们需要通过归档或者数据库等


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值