沙盒结构
应用程序包
: 包含所有资源文件和可执行文件
Documents
: 保存应用运行时生成的需要持久化的数据 iTnues同步会备份
tmp
: 保存应用运行时所需的临时数据 iTnues不会备份
Library/Caches
: 保存应用运行时生成的需要持久化的数据 (缓存)
iTnues不会备份 一般存储体积大,不需要备份的非重要数据
Library/Preference
: 保存应用的所有偏好设置 iTnues会备份
//沙盒根目录
NSString *sandBoxPath = NSHomeDirectory();
//temp目录
NSString *tmpDir = NSTemporaryDirectory();
//Documents路径
//NSDocumentDirectory 表示获取沙盒的Documents目录;
//NSUserDomainMas用户主目录中;
//YES/NO是否获取全路径;
NSArray *paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
`Cache 目录` NSCachesDirectory
`Libary`NSLibraryDirectory
//拼接字符串 stringByAppendingPathComponent
NSString *str = [filePath stringByAppendingPathComponent:@"文件名"];
//常用的po指令
- 显示沙盒路径
po NSHomeDirectory()
- 显示 Bundle 路径
po [[NSBundle mainBundle] bundlePath]
文件存储方式
1.Plist存储(XML形式)
只要一个对象有writeToFile方法 就可以存储plist
//filePath是路径
//atomically 为 NO 直接写入目标文件 YES 为先创建临时文件 写完后导入目标文件
NSDictionary *dict = @{@"1":@"2"};
[dict writeToFile:filePath atomically:YES];
2.偏好设置存储(存储为字典文件,每一条数据对应一个键值对)
好处:
1.存储数据不需要关心文件名称
2.快速存储键值对
//还有其他方法 setIngeter setBool...
[[NSUserDefaults standardUserDefaults] setObject:_pwdField.text forKey:PwdKey]; //存值
[[NSUserDefaults standardUserDefaults] synchronize];//同步ios8之后好像不需要了呢~
[[NSUserDefaults standardUserDefaults]objectForKey:PwdKey];//取值
3.归档
使用归档存储oc对象,模型必须遵守NSCoding协议,且必须实现两个方法
// 用来存储数据,存档那几个属性
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_name forKey:NameKey];
[aCoder encodeObject:_phoneNo forKey:PhoneNO];
}
// 用来读取数据,解档后的属性保存给谁
- (id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
_name = [aDecoder decodeObjectForKey:NameKey];
_phoneNo = [aDecoder decodeObjectForKey:PhoneNO];
}
return self;
}
// 归档,将数据存储起来,存到Document文件夹
[NSKeyedArchiver archiveRootObject:self.contacts toFile:FilePath];//filePath为上述document目录
// 解档,读取数据
_contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:FilePath];