归档 和 解归档

作者: DVWang | 来源:发表于2017-09-08 14:58 被阅读0次

    1、把任何类型的数据经过一定的加工 归档 最终能够存储起来
    2、自定义了一个类 Class 创建了数据 怎么存起来 -> 二进制数据
    归档的作用 能够把我们自己创建的类 存储起来 压缩的过程
    解归档 就是把我们已经归档了的数据 再逆转回来 解压的过程
    <NSCoding协议> 并且实现两个方法
    //归档的时候 使用的方法 使用归档器 来进行操作

    • (void)encodeWithCoder:(NSCoder *)aCoder
      {
      //归档 实质 是给 类的成员变量 进行归档
      //使用归档器来进行归档
      [aCoder encodeObject:_name forKey:@"name"];
      [aCoder encodeInteger:_age forKey:@"age"];
      [aCoder encodeObject:_ID forKey:@"ID"];
      }
      //解归档的时候 使用的方法 使用解归档器 进行解归档

    • (instancetype)initWithCoder:(NSCoder *)aDecoder
      {
      //把归档了的成员变量都进行解归档
      self = [super init];
      if (self) {
      _name =[aDecoder decodeObjectForKey:@"name"];
      _age = [aDecoder decodeIntegerForKey:@"age"];
      _ID = [aDecoder decodeObjectForKey:@"ID"];
      }
      return self;
      }
      Student * laoWang = [[Student alloc]initWithAge:12 Name:@"laoWang" ID:@"010101"];

        //现在我们把 这个对象进行归档
        //归档
        NSMutableData * data = [[NSMutableData alloc]init];
        //把归档的数据都写到data里面
        NSKeyedArchiver * keyed =[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
         //归档器里面可以存放多个数据
        [keyed encodeObject:laoWang forKey:@"laoWang"];
        [keyed finishEncoding];
        //data已经拿到了老王的所有数据
        [data writeToFile:@"/Users/apple/Desktop/a" atomically:YES];
        
        //解归档
        NSKeyedUnarchiver *unKeyed = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
       Student * someOne = [unKeyed decodeObjectForKey:@"laoWang"];
        [unKeyed finishDecoding];
        NSLog(@"%@",someOne);
      

    //main中归档解归档
    //把归档的数据都写到data里面
    NSKeyedArchiver * keyed =[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
    //归档器里面可以存放多个数据
    [keyed encodeObject:laoWang forKey:@"laoWang"];
    [keyed finishEncoding];

    //data已经拿到了老王的所有数据
    [data writeToFile:@"/Users/apple/Desktop/a" atomically:YES];

    //解归档
    NSKeyedUnarchiver *unKeyed = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
    Student * someOne = [unKeyed decodeObjectForKey:@"laoWang"];
    [unKeyed finishDecoding];

    二、多个对象的归档 如果有关系
    Class Student
    Class 有 Student
    不仅让Class类 遵守Coding协议 Student也遵守Coding协议

    相关文章

      网友评论

        本文标题:归档 和 解归档

        本文链接:https://www.haomeiwen.com/subject/blogjxtx.html