一、沙盒
每个iOS应用都有⾃己的应⽤沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应⽤必须待在⾃己的沙盒里,其他应用不能访问该沙盒。
Documents: 保存应⽤运行时生成的需要持久化的数据 存储跟用户相关的文件, 用户的一些文本信息, 最好不要存储空间占用比较大的文件比如视频/音频等等.
library: 给开发者使用的 用来存储一些东西的文件夹
library//caches: 缓存文件夹, 用户看过的一些图片, 音频, 视频, 都可以存储在这个文件夹中, 一般清空缓存就是清除这个文件夹的所有内容
library//preferences: 给开发者存储一些内容,NSUserDefaults保存的信息都在这个文件夹中
temp: 临时文件夹, 存储网络请求过程中的一些临时文件 app版本更新的时候, 会直接清空tmp文件夹。
二、NSKeydeArchiver归档
自定义对象进行归档处理,对象的属性要求:为基本数据类型(int或float)或者属性为实现了NSCoding协议类的实例。
1. 拼接一个存储路径
系统提供了一个函数(利⽤NSSearchPathForDirectoriesInDomains函数), 可以直接返回某个沙盒文件夹的路径
// 返回值: 找到的路径组成的数组, 如果搜索的时系统的沙盒文件夹路径,数组中只有一个元素
// 参数1: 搜索沙盒中的那个文件夹
// 参数2: 搜索的范围
// 参数3: 返回的时相对路径还是绝对路径 ,NO 相对路径 (给我们看到的) YES 绝对路径(给系统看的)
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
取出documents文件夹路径
NSString *docPath = [arr firstObject];
a. 创建BOSS类
Boss.h中
// nscoding协议, 把一个类中的所有数据进行整体的编码, 方便进行文件读取操作
@interface Boss : NSObject<NSCoding>
@property (nonatomic, retain)NSString *name;
@property (nonatomic, retain)NSString *sex;
@property (nonatomic, retain)NSString *number;
@end
Boss.m中
#import "Boss.h"
@implementation Boss
// 编码的方法
- (void)encodeWithCoder:(NSCoder *)aCoder
{
// 对每个属性都进行标记, 用于在读取数据的时候进行恢复
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.sex forKey:@"sex"];
[aCoder encodeObject:self.number forKey:@"number"];
[aCoder encodeObject:self.name forKey:@"name"];
}
// 解码的方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
// 每次都按照之前给定的key 给对应的属性赋值
self.name = [aDecoder decodeObjectForKey:@"name"];
self.sex = [aDecoder decodeObjectForKey:@"sex"];
self.number = [aDecoder decodeObjectForKey:@"number"];
}
return self;
}
b. 创建boss对象
Boss *boss = [[Boss alloc] init];
boss.name = @"老管";
boss.sex = @"男";
boss.number = @"1";
// 将复杂对象写入本地的工具
// 参数1: 要写入本地的对象
// 参数2: 写入本地的路径
NSString *bossPath = [docPath stringByAppendingPathComponent:@"boss.txt"];
c. 归档类
BOOL result = [NSKeyedArchiver archiveRootObject:boss toFile:bossPath];
NSLog(@"%d", result);
[boss release];
Boss *bossReturn = [NSKeyedUnarchiver unarchiveObjectWithFile:bossPath];
NSLog(@"%@", bossReturn.name);