沙盒-归档-解档


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

1.每个应用程序只有一个沙盒 

2.沙盒里面有三个文件夹

       1Documents ->目录下地类容 会被同步到另一台设备 可以放媒体资源、文本资源  

   2Library -> 可以把缓存的内容放到Library/Caches里面 3tmp->创建临时文件目录 当我们的设备重启是 文件会被自动清除   */

 /* 归档:NSKeyedArchiever

    解归档:NSKeyedUnarArchiever

       1.归档又叫序列化(coding

       2.归档的文件 会被加密(数据就有一定的安全性)

       3.可以归档的文件、数据:任何数据(直接归档一个类、实例化的对象、数组、字典、文本、图片...

 归档的步骤:

       1.归档的路径 需要归档的数据

       2.归档、解归档  */

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

/*#pragma mark———获得根目录的方式—————————————————————————————————-

    NSString *homePath = NSHomeDirectory();

    NSLog(@"%@",homePath);

#pragma mark------ 获得Documents目录的方式

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

    NSString *DocumentPath = [paths firstObject];

    NSLog(@"%@",DocumentPath);

#pragma mark------  获取Library目录方式

    NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

    NSString *LibraryPath2 = [paths2 lastObject];

    NSLog(@"%@",LibraryPath2);

 #pragma mark------  获取Caches目录方式

    NSArray *paths3 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

    NSString *LibraryPath3 = [paths3 lastObject];

    NSLog(@"%@",LibraryPath3);

  #pragma mark------  获取Tmp目录方式

    NSString *tempPath = NSTemporaryDirectory();

    NSLog(@"%@",tempPath);*/

    #pragma mark———第一种归档方式—————————————————————————————————-

//   一、归档

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

   NSString *documentPath = [paths lastObject];

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

    NSArray *users = @[@"葫芦娃",@"喵喵",@"汪汪"];

BOOL success = [NSKeyedArchiver archiveRootObject:users toFile:path];

    if (success) {

      [self showAlerWithMessage:@"归档成功"];//调用一下

      NSLog(@"%@",path);

    }  

// 二、解归档

// 1.解归档的文件路径

// 2.解归档

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

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

//    解归档的类

   NSArray *list = [NSKeyedUnarchiver unarchiveObjectWithFile:path];   

    NSMutableArray * arr = [list mutableCopy];

    [arr addObject:@“悟空"];

//    遍历一下数组

  for (NSString *name in arr) {

        NSLog(@"%@",name);

    }

#pragma mark———第二种归档方式———————————————————————————————————

// 一、创建归档

//    归档两个: 一个数组一个字典

//    NSData:这是一个二进制文件的一个类

//    步骤:   1.归档的路径、准备需要归档的数据     

                   2.写一个可变的NSMutableData的数据 通过归档的类 让NSData准备写入到文件 

                   3.开始编码(归档 )

                   4.结束编码(归档) 把NSData数据写入到文件

//    1.归档的路径、准备需要归档的数据

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

        NSString *pathy = [[pathx lastObject]stringByAppendingPathComponent:@"userList1.archiver"];

    NSArray *list = @[@"111",@"222",@"333"];

   NSDictionary *dic = @{@"key":@"value"};

//   2.写一个可变的NSMutableData的数据 通过归档的类 让NSData准备写入到文件

  NSMutableData *data = [NSMutableData data];

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

//    3.开始编码(归档 ) 注意:编码的key和解码的key 一定要统一

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

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

//    4.结束编码(归档) 把NSData数据写入到文件

     [archiver finishEncoding];

  BOOL success = [data writeToFile:pathx atomically:YES];//atomically如果设置成YES的时候 在写入数据时 如果出现意外情况(用户强制退出了应用程序、断电...)会把写入到临时文件的内容清掉 不再写入到目标文件 如果是NO 不管数据是否完整 都会直接写入到目标文件

  if (success) {

        [self showAlerWithMessage:@"归档成功"];

  }   

//    二、解归档

//    步骤:

           1.文件路径 

           2.读取文件里面data数据 

           3.通过解归档对象 读取data数据 准备解归档 

           4.解归档数据    

//    1.文件路径

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//Document(文件) Directory(目录)

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

//   2.读取文件里面data数据

    NSData *data = [NSData dataWithContentsOfFile:path]; 

//    3.通过解归档对象 读取data数据 准备解归档

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

//    4.解归档数据(解码)

  NSArray *arr = [unAchiver decodeObjectForKey:@"list"];//返回值是一个id类型 decode(破译)

    NSDictionary *dic = [unAchiver decodeObjectForKey:@"dic"];

//    NSLog(@"\n%@ \n %@",arr,dic);

#pragma mark——— 第三种归档方式————————————————————————————————-

//   一、  创建归档

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

//    归档:

//    1.准备要归档文件的路径 要归档的数据

//    2.进行归档

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

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

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

   model.name = @"葫芦娃";

   model.age =18; 

   BOOL success = [NSKeyedArchiver  archiveRootObject:model toFile:path];

   if(success)

   {

      [self showAlerWithMessage:@"归档成功"];

  }

//二、解归档

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

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

    UserModel *model = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

    NSLog(@"%@ %ld",model.name,model.age);

       return YES;

}

- (void)showAlerWithMessage:(NSString *)message

{

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

    [alert show];


}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值