IOS开发--数据持久化篇之文件存储(一)
在这里我就不照搬教科书上抽象的概念了.我觉得既然要把东西写出来就让它简单明了.
要搞清楚数据持久化,首先要知道数据持久化是相对于缓存而言的,缓存是在程序运行的过程中保存在内存中,程序一旦运行结束,其内存就会被释放.缓存在内存中的数据也就随之消失.
那么数据持久化就是要解决上述的这个问题,如常见的用处:保存用户设置的头像,昵称等这些重要信息.
解决的思路如下:将程序运行过程中需要保存的数据通过一定的形式(某些载体)保存起来而不是简单地在程序运行过程中缓存起来.此操作之后,在程序下次运行的时候可以再将这些数据从存储的载体中读取出来,那么我们也就实现了数据持久化
(保存的操作叫做序列化,读取解析操作叫反序列化)
简言之就是:将数据通过一定的形式保存起来并在需要时再读取解析就实现了所谓的数据持久化
1.文件存储
将需要的数据通过文件存储起来如:bin文件xml文件txt文件等等..
2.数据库存储
将数据保存到数据库相应的表字段中, 常见的数据库有SQLServer MySQL Oracle 以及SQLite
我们刚刚说到将数据保存到文件中,那么有文件就有文件保存的路径.
在IOS中,我们的应用将打包其文件到特定的文件夹(目录)中,这种个文件夹 叫做应用沙盒,每个应用都有自己的应用沙盒,并且每个沙盒之间是相互独立的.这样做的原因,两个字:安全.相互独立,也就是说程序无法随意篡改或删除其他程序的文件,浏览器中保存cookie的文件也是如此,不同域名有不同的cookie文件,并且无法访问其他域名下相关的cookie的文件...扯远了,有兴趣的朋友自己扩展
1) 拿到我们应用沙盒的根路径: NSHomeDirectory()
2) 步骤截图:
步骤一:在viewDidLoad:如下图所示,右边显示便是沙盒路径(复制)

步骤二:打开Finder 并按下快捷键cmd+shift+G 输入沙盒路径 并回车

步骤三,得到沙盒结构图

Document
Library/Caches
Library/Preferences
tmp
所以我们根据在存储数据文件的时候需要结合上面所列的目录特点,将对应的数据保存至适当的路径下面
两种方式:
1.拼接:
NSString homePath = NSHomeDirectory();//获取沙盒根路径
NSString documentPath =
[ homePath stringByAppendingPathComponent:@"Documents"];
2.搜索目录
NSArray*pathArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);
NSString documentPath = [pathArray objectAtIndexOf :0];
1).什么是属性列表:

2).特点:
如:NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSData,NSMutableData,NSString,NSMutableString,NSNumber,NSDate
3).代码
-(void)writeDictionaryToFile{
//1.初始化对象
NSDictionary *dic = @{
@"name":@"jack",
@"country":@"China",
@"province":@"GuangDong"
};
//2.保存路径(Documents)
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
path = [path stringByAppendingPathComponent:@"testdic.plist"];
//3保存文件
[dic writeToFile:path atomically:YES];
}
程序运行后我们找到创建好的文件,打开效果如图:

读取(解档)代码:
-(void)readDictionaryFromFile{
//1.获取路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
path = [path stringByAppendingPathComponent:@"testdic.plist"];
//2.读取文件中的数据
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"%@",dic);
}
效果图(断点):

IOS开发--数据持久化篇之文件存储(一)的更多相关文章
- IOS开发--数据持久化篇文件存储(二)
前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...
- iOS开发——数据持久化Swift篇&通用文件存储
通用文件存储 import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextFie ...
- iOS开发——数据持久化Swift篇&使用Core Data进行数据持久化存储
使用Core Data进行数据持久化存储 一,Core Data介绍 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成 ...
- iOS开发数据持久化技术02——plist介绍
有疑问的请加qq交流群:390438081 我的QQ:604886384(注明来意) 微信:niuting823 1. 简单介绍:属性列表是一种xml格式的文件.扩展名.plist: 2. 特性:pl ...
- iOS开发——数据持久化Swift篇&iCloud云存储
iCloud云存储 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super. ...
- iOS开发——数据持久化&本地数据的存储(使用NSCoder将对象保存到.plist文件)
本地数据的存储(使用NSCoder将对象保存到.plist文件) 下面通过一个例子将联系人数据保存到沙盒的“documents”目录中.(联系人是一个数组集合,内部为自定义对象). 功能如下: ...
- iOS开发——数据持久化OC篇&plist文件增删改查操作
Plist文件增删查改 主要操作: 1.//获得plist路径 -(NSString*)getPlistPath: 2.//判断沙盒中名为plistname的文件是否存在 -(BOOL ...
- iOS开发——数据持久化Swift篇&(二)沙盒文件
沙盒文件 //******************** 5.2 文件操作 func use_FileOperations() { //1.获取程序的Home目录 let homeDirectory = ...
- iOS开发——数据持久化Swift篇&(三)SQLite3
SQLite3 使用 //******************** 5.3 SQLite3存储和读取数据 func use_SQLite3() { //声明一个Documents下的路径 var db ...
随机推荐
- Android中ProgressDialog的简单示例
网上一般对进度条的示例都是如何显示,没有在任务结束如何关闭的文章,参考其他文章经过试验之后把整套进度条显示的简单示例如下: 建立android工程等工作都略去,Google一下就可以了. 下面来介绍主 ...
- bzoj2535 2109
做过4010这题其实就水了 把图反向之后直接拓扑排序做即可,我们可以用链表来优化 每个航班的最小起飞序号就相当于在反向图中不用这个点最迟到哪 type node=record po,next:long ...
- Java [Leetcode 118]Pascal's Triangle
题目描述: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5 ...
- linux常用命令之--磁盘管理命令
linux的磁盘管理命令 1.查看磁盘空间 df:用于显示磁盘空间的使用情况 其命令格式如下: df [-option] 常用参数: -i:使用inodes显示结果 -k:使用KBytes显示结果 - ...
- 【Opencv 小工具】鼠标选区信息获取
有时候在目标跟踪的算法初始化工作时候,需要选区一个Rect区域,来表示要跟着的目标,所以有次小工具. 使用QT和opencv 编写 项目地址 https://github.com/wzyuliyang ...
- OpenGL学习——基本概念和坐标变换
基本概念 基本功能:几何图形.变换.着色.光照.贴图 高级功能:曲面图元.光栅操作.景深.shader编程 状态机 先设置状态参数:多边形.顶点列表.填充颜色.纹理.混合模式.坐标系 再调用绘图指 ...
- springmvc里面的中文乱码问题
如果是以get方法提交的表单,则可以在comcat服务器的server.xml文件里面设置 <Connector connectionTimeout="20000" port ...
- BS与CS的联系与区别
C/S是Client/Server的缩写.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.InFORMix或SQL Server.客户端需要安装专用的客 ...
- matlab中图像处理常见用法
一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:/w01.tif') 注:计算机E盘上要有w01相应的.tif文件. 2. imwrite i ...
- java中的==和equals的区别
关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...