天天看点

iOS中的数据持久化,归档和反归档

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    //打印当前应用程序的沙盒路径

    NSLog(@"%@", NSHomeDirectory());

    //沙盒:在一定范围内可以随意做任何事

    //iOS程序的沙盒指的就是应用程序的文件操作文件夹, 在文件夹内可以读写任何内容, 但是完全不能访问其他应用程序的沙盒文件夹

    //Documents:跟用户相关的一些文件, 用户设置的对这个app的偏好设置. 用户的一些文本信息. 最好不要存储空间占用比较大的文件比如视频/音频等等

    //Library:给开发者使用的, 用来存储一些东西的文件夹

    //Caches:缓存文件夹, 用户看过的一些图片, 音频, 视频, 都可以存储在这个文件夹中.一般的app, 清除缓存意思就是清除这个文件夹的所有内容

    //Preferences: 给开发者存储一些内容, NSUserDefaults保存的信息都在这个文件夹中

    //    [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:<#(NSString *)#>]

    //tmp:临时文件夹, 存储网络请求过程中的一些临时文件. app版本更新的时候, 会直接清空tmp文件夹.

    //简单对象写入本地

    //NSString, NSNumber, NSDictionary, NSArray, NSData;

    //1.拼接一个存储路径

    //系统提供了一个函数, 可以直接返回某一个沙盒文件夹的路径

    //返回值: 找到的路径组成的数组, 如果搜索的是系统的沙盒文件夹路径, 数组中只有一个元素.

    //参数1:搜索沙盒中的哪个文件夹

    //参数2:搜索的范围

    //参数3:返回的是相对路径还是绝对路径

    NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSLog(@"%@", arr);

    //获取文件路径

    //取出documents文件夹的路径

    NSString *docPath = [arr lastObject];

    //拼接一个文件的路径

    NSString *txtPath = [docPath stringByAppendingString:@"/123.txt"];

    //2.按照路径写入

    NSString *str = @"aa";

    //参数1:要写入的路径

    //参数2:是否对写入的文件进行写保护

    //参数3:编码格式

    //参数4:错误信息

    NSError *error = nil;

    [str writeToFile:txtPath atomically:YES encoding:NSUTF8StringEncoding error:&error];

    //数组写入本地

    NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];

    NSString *arrPath = [docPath stringByAppendingPathComponent:@"suibian.plist "];

    //写入本地

    [array writeToFile:arrPath atomically:YES];

    //创建boss对象

    Boss *boss = [[Boss alloc] init];

    boss.name = @"ww";

    boss.number = @"20";

    boss.sex = @"man";

    // 将复杂对象写入本地的工具

    //参数1:要写入本地的对象

    //参数2:要写入的路径

    NSString *bossPath = [docPath stringByAppendingPathComponent:@"boss.aa"];

    //归档类

    BOOL result = [NSKeyedArchiver archiveRootObject:boss toFile:bossPath];

    NSLog(@"复杂对象写入本地:%d", result);

    [boss release];

    //反归档类

    //从本地读取数据产生一个新的复杂对象

    Boss *bossReturn = [NSKeyedUnarchiver unarchiveObjectWithFile:bossPath];

    NSLog(@"%@", bossReturn.name);

}