iOS-沙盒

iOS的沙盒(sandbox) 机制:是一种安全体系,iOS应用程序只能对自己创建的应用进行读取文件,这个独立 封闭 安全 的空间 就是咱们说的沙盒 。它里面一般存放着你的程序所需要的文件,数据持久化的一些文件(Plist。sqkite…)音视频,图片以及其他的资源文件。

每一个程序只有一个沙盒,沙盒里面有三个文件夹
1.Documents 目录下的内容 会被同步到另一台设备上 可以放 媒体资源 文本资源

2.Library 可以把缓存的内容放到Library/Caches里面

3.tmp 创建临时文件的目录 当我们的设备重启时,文件会被自动清除

1、获取根目录的方式

NSString *homePath = NSHomeDirectory();
   NSLog(@"%@",homePath)

2、获得Documents 目录的方式

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *DocumentPath = [paths firstObject];
NSLog(@"%@",DocumentPath);

3、Library 目录;

NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
   NSString *library = [path2 firstObject];
   NSLog(@"%@",library);

4、Library 目录;下得Caches

 NSArray *path3 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *Caches = [path3 lastObject];
    NSLog(@"%@",Caches);

5、零时目录tmp目录

NSString *tmpPath = NSTemporaryDirectory();
  NSLog(@"%@",tmpPath);

归档 :NSKeyedArchiver
解归档: NSKeyedUnarchiver
归档又叫序列化(coding)
归档之后的文件 会被加密
可以归档的文件 数据 任何数据(直接归档一个类实例化的对象 数组 字典 字符串 文本 图片。。。。)

1、归档 步骤
//1.归档路径 需要归档的数据
//2.归档。解归档
1)、

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *documentPath = [paths lastObject];

2)、拼接归档文件的路径

 NSString *path = [documentPath stringByAppendingPathComponent:@"userList.archiver"];
    NSArray *users = @[@"葫芦娃",@"喵喵",@"旺旺"];

3)、归档

  [NSKeyedArchiver  archiveRootObject:users toFile:path];

   NSLog(@"path 是%@",path);

2、解归档
//1.解归档的文件路径
//2.解归档
1)、

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

   NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList.archiver"];

2)、

NSArray *list =  [NSKeyedUnarchiver unarchiveObjectWithFile:path];


    for (NSString *name in list) {
        NSLog(@"%@",name);
   }

    NSMutableArray *arr = [list mutableCopy];
    [arr addObject:@"娜扎"];
    for (NSString *name in arr) {
        NSLog(@"%@",name);

    }

第二种归档方式

NSData 二进制数据的类
//1.归档文件的路径 准备归档的数据
//2.写一个可变的NSMutableData 通过归档的类 让Data准备写入到文件
//3.开始(归档)编码
//4.结束编码,或则归档 把Data数据写入到文件

1)、归档文件的路径 准备归档的数据

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

     NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.archiver"];


   NSArray *list = @[@"1",@"2",@"3"];
    NSDictionary *dic = @{@"key":@"value"};

2)、写一个可变的NSMutableData 通过归档的类 让Data准备写入到文件

 NSMutableData *data = [NSMutableData data];
    NSKeyedArchiver  *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

3)、.开始(归档)编码(编码的key和解码时候的key一定要统一)

[archiver encodeObject:list forKey:@"list"];
[archiver encodeObject:dic forKey:@"dic"];

4)、结束编码,或则归档 把Data数据写入到文件

[archiver finishEncoding];

将数据写入 (先全部写入零时文件,在写入目标文件) atomically如果设置成yes在写入数据时,如果出现意外情况(用户突然强制退出了,或则断电了。。。)会把写入到零时文件的内容清掉 不再写入目标文件 如果atomically如果设置成是NO,不管数据是否完整,都会直接写入到目标文件

[data writeToFile:path atomically:YES];

2、解归档
//1.文件路径
//2.读取文件里面Data数据
//3.通过解归档对象 读取Data数据 准备解档
//4.解归档数据

1)文件路径

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

         NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.archiver"];

2)、读取文件里面Data数据

NSData *data = [NSData dataWithContentsOfFile:path];

3)、通过解归档对象 读取Data数据 准备解档

NSKeyedUnarchiver  *unArchive = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

4)、解归档数据(又叫做解码)

NSArray *arr=  [unArchive decodeObjectForKey:@"list"];
 NSDictionary *diction=  [unArchive decodeObjectForKey:@"dic"];
   NSLog(@"%@",arr);
  NSLog(@"%@",diction);

要想归档 自定义类的对象
//1遵守归档协议NSCoding
//2实现归档协议里面的方法
//3逐一对 自定义类里面的属性 进行了 编码和解码 这时候 这个对象 就具备了 归档 解归档的功能
// 开始归档 解归档

//1 要归档文件的路径 要归档的数据
//2 进行归档

1)、要归档文件的路径 要归档的数据

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"UserModel.archive"];

   UserModel *model = [[UserModel alloc]init];

    model.name = @"武器大师";
   model.age = 18;

  BOOL success =  [NSKeyedArchiver archiveRootObject:model toFile:path];
    if (success) {
        [self showAlertWithMessage:@"我靠,成了"];
        NSLog(@"你妹的,出不来");
    }

2)、解归档

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"UserModel.archive"];

  UserModel *model =  [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"%@\n%ld",model.name,model.age);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ldl_csdn_ios

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值