沙盒
沙盒
什么是数据持久化?数据的永久存储 为什么要做数据持久化:数据在内存中的数据,程序关闭,内存释放,数据丢失, 这种数据是临时的 数据持久化的本质:数据保存成文件,储存到程序的沙盒中
沙河机制
每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内都放在了统一的文件夹目录下 沙盒的本质就是一个文件夹,名字是随机分配的
沙盒路径的位置 1.通过Finder查找程序沙盒相对路径 沙盒构成
Document 存储用户数据,需要备份的信息 Library/Caches 存储缓存文件,程序专用的支持文件 Library/Preferences 存数应用程序的偏好设置文件
.app 程序包(iOS8时.app不存储在沙盒中,有单独的文件夹存储所有程序的
app包)
tmp 存储临时文件.比如:下载的zip包,解压后的在删除
通过代码查找程序沙盒相对路径
NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearchPathDomainMask domainMask,BOOL expandTilde);
获取沙河目录路径的方法
NSHomeDirectory ———————沙盒主路径
NSDocumentDirectory————————Documents文件夹
NSLibraryDirectory —————————Library文件夹
NSCachesDirectory————————Caches文件夹
NSTemporaryDirectory()———————tmp文件夹
简单写入文件 文件存储的相对目录
//获取所有的documents文文件夹 NSArray *documentList =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,
YES);
//将最后的一一个documents文文件夹路径作为文文件的存储⺫目目录 NSString *documentPath = documentList.lastObject;
字符串对象写入入文文件
//构造字符串文文件的存储路径NSString *strPath = [documentPath
stringByAppendingString:@"/text.txt"]; //构造字符串对象NSString *foo_str = @“this is a test”;
//通过将writeToFile:atomically:encoding:error:方方法发送给字符串对象完成 字符串存储到 文文件内的功能
[foo_str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
数组对象写入入文文件
//构造数组plist文文件的存储路径NSString *arrayPath = [documentPath
stringByAppendingString:@“/ array.plist”];
//构造数组对象NSArray *foo_array = @[@“cyy”,@“yhy”,@“xdp”,@“lmz”,@“zdh”,@“snn”];
//通过将writeToFile:atomically:方方法发送给数组对象完成数组存储到文文 件内的功能 [foo_array writeToFile:arrayPath atomically:YES];
字典对象写入入文文件
//构造字典plist文文件的存储路径NSString *dicPath = [documentPath
stringByAppendingString:@“/dic.plist”];
//构造数组对象 NSDictionary *foo_dic =
@{@“jz”:@“cyy”,@“jzzl”:@“yhy”,@“js”:@“xdp”,@“jzzlzl”:@“lmz”,@“jfz”:@“zdh ”,@“tq”:@“snn”};
//通过将writeToFile:atomically:方方法发送给字典对象完成数组存储到文文 件内的功能 [foo_dic writeToFile:dicPath atomically:YES];
二二进制对象写入入文文件
//构造二二进制文文件的存储路径NSString *dataPath = [documentPath
stringByAppendingString:@“/ data.da”];
//通过将writeToFile:atomically:方方法发送给二二进制对象完成二 二进制存储到文文 件内的功能
[foo_data writeToFile:dataPath atomically:YES];
注:二二进制对象可能存储的是图像、字符串等等。