iOS简单的数据持久化
2015-09-17 19:08
537 查看
首先,我们要了解: 什么是数据持久化? 我们为什么要做数据持久化?
数据持久化就是数据的永久存储. 我们在写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(可扩展标记语言)
![](http://img.blog.csdn.net/20150917194311380?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
//指定数组的文件存储路径
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:方法进行数据持久化. 我们需要通过归档或者数据库等
数据持久化就是数据的永久存储. 我们在写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:方法进行数据持久化. 我们需要通过归档或者数据库等
相关文章推荐
- iOS的沙盒机制
- iOS - 邮件 短信 通讯录
- iOS提示框,为什么你应该使用 MBProgressHUD?
- iOS提示框,为什么你应该使用 MBProgressHUD?
- iOS - 数据持久化 - 文件的写入(简单对象和复杂对象)
- iOS上的ReactiveCocoa响应式编程
- iOS 去除tableview的黏性
- iOS中Bitcode的介绍及配置
- 用CocoaPods做iOS程序的依赖管理(转载)
- idfa还是idfv,IOS唯一标示利弊分析
- iOS开展block说明
- iOS9适配技巧
- ubuntu 启动项创建器 选择不了CD镜像,IOS镜像的解决方法
- IOS 证书配置
- iOS9新特性
- iOS9 JSONKit闪退解决方案
- iOS程序拨打电话
- iOS 小 Tip:优化侧滑返回与 ScrollView 的兼容性
- iOS中传值方式
- iOS单个方向的圆角处理