归档和解归档

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

2.每个应用程序只有一个沙盒   沙盒里面有三个文件夹
    1)Documents  目录下的内容 会被同步到另一台设备  可以存放媒体资源  文本资源
     2)Library   可以把缓存的内容放到Library/Caches
     3)tmp  创建临时文件的目录,当我们的设备重启时,文件会被自动清除
     4)获取根目录的方式
             NSString *homePath = NSHomeDirectory();
     5)获得Documents的方式
              NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
              NSString *DocumentsPath = [paths firstObject];
     6)   获取Library目录
              NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES];
              NSString *library = [path2 lastObject];
     7)     获取Caches目录
               NSArray *Path3 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
                 NSString *library = [path3 lastObject];
     8)获取临时文件目录Tmp
       NSString *tmpPath = NSTemporaryDirectory();

归档
1.定义
        归档 :把咋们内存里面的数据放到一个文件里面   归档又叫序列化(coding)归档后的文件 会被加密

2.使用的类   NSKeyedArchiver(归档)   NSKeyedUnarchiver(解归档)
3.归档可以归档文件  数据  任何数据(直接归档一个类实例化的对象  数组  字典  字符串  文本  图片...)

4.第一种归档
         归档步骤  1.归档路径  需要归档的数据   2.归档  解归档
                   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask/*收索范围*/, YES);
                    NSString *documentsPath = [paths lastObject];
          拼接归档文件的路径
                    NSString *path = [documentsPath stringByAppendingPathComponent:@“userList.archiver"];
           将小米 ,小明,小海归档  将他们放到一个数组里
                     NSArray *users = @[@“小米",@"小明",@"小海"];
                     BOOL success = [NSKeyedArchiver archiveRootObject:users /*归档的数据*/toFile:path/*归档路径*/];

解归档

1.步骤    1)解归档的文件路径    2)解归档
             NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
              NSString *path = [[paths1 lastObject] stringByAppendingPathComponent:@“userList.archiver/*这里的路径要和归档的时候相同*/”];
               NSArray *list = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

5.第二种归档
      这里要使用NSData  二进制数据类
归档
   1)步骤
             (1)归档文件路径  准备需要归档的数据
             (2)写一个NSMutableData 通过归档的类  让Data准备写入到文件
             (3)开始(归档)编码
             (4) 结束(归档)编码  把Data数据写入到文件

归档的数据数组 字典
  NSArray *list = @[@"111",@"222",@"333"];
  NSDictionary *dic = @{@"key":@"value"};

(1)归档文件路径  准备需要归档的数据
           NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“userList.archiver”];

 (2)写一个NSMutableData 通过归档的类  让Data准备写入到文件
            NSMutableData *data = [[NSMutableData alloc]init];
            NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];  

  (3)开始(归档)编码
            [archiver encodeObject:list forKey:@“list"];
            [archiver encodeObject:dic forKey:@“dic"];

  (4) 结束(归档)编码  把Data数据写入到文件
              [archiver finishEncoding];
              BOOL success = [data writeToFile:path atomically:YES];
         说明:atomically 设置为YES的时候 在写入数据时  如果出现意外情况(用户突然强制退出了应用程序  断电。。。)会把写入的临时文件的内容 清除 不在写入到目标文件
             设置为NO的时候 在写入数据时  如果出现意外情况(用户突然强制退出了应用程序  断电。。。)都会把写入的临时文件的内容写入到目标文件(不论文件是否完整)

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

1.文件路径
       NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *path1 = [[paths1 lastObject] stringByAppendingPathComponent:@“userList.archiver"];

  2.读取文件里面Data数据
      NSData *data1 = [NSData dataWithContentsOfFile:path1];

  3.通过解归档对象 读取Data数据 准备解归档
      NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data1];

  4.解归档数据
       NSArray *arra = [unArchiver decodeObjectForKey:@“list”];
        NSDictionary *dict = [unArchiver decodeObjectForKey:@"dic"];

6.第三种归档

     想归档  自定义类的对象
步骤
       1)遵守NSCoding协议
       2)实现归档协议里面的方法
       3)逐一对 自定义类里面的属性 进行了编码和解码 这时候这个对象 就具备了归档 解归档的功能
       4)开始归档 解归档
代码:
         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];

解归档
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
       NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“UserModel.archive"];
       UserModel *model = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

   NSStNSString *path = [documentsPath stringByAppendingPathComponent:@"userList.archiver"];ring *documentsPath = [paths lastObject];
时间: 2024-08-25 03:43:41

归档和解归档的相关文章

将通讯录类(姓名、电话),添加归档和解归档方法,即,添加储存信息到磁盘的方法。

/*1.将通讯录类(姓名.电话),添加归档和解归档方法,即,添加储存信息到磁盘的方法.*/ #import <Foundation/Foundation.h>#import "ConTact.h"#define PATH @"/Users/qianfeng/Desktop/hehe/2.plist" int main(int argc, const char * argv[]) {    @autoreleasepool {        ConTact

【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结

对对象进行归档,和对对象进行拷贝差不多路数,也就是需要协议,之前的时对NSString和NSNumber这些对象为什么没有归档协议?因为它们自带了. 所以如果我们要对自定义的对象(而不是Foundation里默认的对象)进行归档的话就需要引入归档协议<NSCoding>. 举例:声明一个User类,然后创建一个对象user1,把这个user1进行归档,然后把归档后的文件解归档到user2中,看看是否是原先的那些数据. (1)User.h #import <Foundation/Found

iOS:文件归档和解归档的详解和使用

文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用来完成用户的需求.对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径的读取文件的内容(也称为接档,反序列化),(对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看). 区别: 通过文件归档产生的文件是不可见的,如果打开

数据的归档和解归档

//归档 BOOL success = [NSKeyedArchiver archiverRootObject:归档的对象 toFile:文件路径]; //解档 id content =  [NSKeyedUnArchiver unarchiveObjectWithFile:文件路径]; //第二种解归档(多对象) //归档 NSString *homePath = NSHomePath(); NSString *filePath = [homePath stringByAppendingPat

大数据开发之文件归档和解归档

一,归档 在大数据开发中往往要运算海量数据,可是这些数据分布在许多小文件中,传输和运算十分不方便,为此我们得进行文件归档 即把几个小文件写到一个文件中形成大文件,可是我们要怎么写呢?每个团队有每个团队的方法,下面介绍我自己的方法. 格式:        4个字节        文件名称的数据存储大小(n,表示存储的文件有几个字节) n个字节        文件名称 4个字节        文件内容的数据存储大小(m,表示存储的文件有几个字节) m个字节        文件内容 有几个小文件,那么

OC-归档和解归档

1 //归档:将对象数据存储到文件的过程 NSArchiver 2 //反归档:从文件中读取数据到对象中的过程 3 4 int main(int argc, const char * argv[]) { 5 @autoreleasepool { 6 7 #if 0 8 //使用系统的方法进行归档 NSArchiver 9 NSDictionary *mutDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"111",@&q

【非凡程序员】 OC第十七节课 文件操作二 (归档和解档)

//-----------------------------归档和解档-----(重点)-------.-----------//        //可变的文件流        NSMutableData *nutabdata=[[NSMutableData alloc]init];        //把用归档格式的数据值给可变的文件流        NSKeyedArchiver *keyde=[[NSKeyedArchiver alloc]initForWritingWithMutable

OC学习篇之---归档和解挡

前几篇文章说到了OC中的Foundation框架:http://blog.csdn.net/jiangwei0910410003/article/details/41852835,今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有

【IOS学习基础】归档和解档

一.归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程.归档是将数据持久化的一种方式(所谓数据持久化,就是指在IOS开发过程中,将数据保存到本地,能够让程序的运行更加流畅). 2.想要归档的数据对象,需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法. 3.归档就是将临时数据保存成本地文件. 4.归档的缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压.所以只能针对小量数据,而且对数据