美文网首页
归档与解档

归档与解档

作者: 忘惘的小风扇 | 来源:发表于2016-07-02 19:54 被阅读116次

    归档:将对象按照一定的格式保存到文件中;
    解档:从文件中还原对象的过程


    官方类的归档与解档方式一:

    归档:
    Bool ret = [NSKeyedArchiver archiveRootObject:arr toFile: @"/Users/qianfeng/Desktop/arr.archive"];
    通过ret来判定是否存档成功
    解档方法一:
    NSArray * arr1 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Desktop/arr.archive"]; 
    解档方法二:
    NSData *data = [[NSData alloc] initWithContentsOfFile:@"/Users/qianfeng/Desktop/arr.archive"];
    NSArray *arr2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    

    官方类的归档与解档方法二:

    归档:
    //1.创建一个空的二进制数据对象
    NSMutableData *mData = [NSMutableData data];
    //2.创建归档对象
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mData];
    //3.将数据写入归档的对象
    [archiver encodeObject:name forKey:@"Name"];
    [archiver encodeInteger:age forKey:@"Age"];
    [archiver finishEncoding];//4.结束归档
    
    
    //读取文档数据
    NSData *data = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/test.archive"];
    //创建解档对象
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        
    //根据key值解档数据
    NSString *str = [unarchiver decodeObjectForKey:@"Name"];
    NSInteger age1 = [unarchiver decodeIntegerForKey:@"Age"];
    //结束解档
    [unarchiver finishDecoding];
    

    注意:至所以某些官方类能进行归档、解档,是因为他们遵守了NSCoding协议,并实现了其中的方法

    @protocol NSCoding
    归档的时候自动调用encodeWithCoder
    - (void)encodeWithCoder:(NSCoder *)aCoder;
    解档的时候自动调用initWithCoder
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
    @end
    

    自定义的归档、解档
    自定义的归档、解档,需要遵守NSCoding协议,并实现协议中的方法
    自定义的归档,就是针对类中的成员变量分别进行归档;
    如果自定义类中包含其他的自定义类,其他的自定义类也需要遵守NSCoding协议;

    相关文章

      网友评论

          本文标题:归档与解档

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