归档 和 解归档

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

  • (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协议

你可能感兴趣的:(归档 和 解归档)