美文网首页
IOS数据存储常用方式(二)NSKeyedArchiver

IOS数据存储常用方式(二)NSKeyedArchiver

作者: TK001 | 来源:发表于2017-11-19 18:47 被阅读0次
    • 特点:
      1. 可以存储自定义模型对象
        • NSKeyedArchiver归档相对较plist存储而言,它可以直接存储自定义模型对象,而plist文件需要将模型转为字典才可以存储自定义对象模型;
      2. 归档不能存储大批量数据(相比较Sqlite而言),存储数据到文件是将所有的数据一下子存储到文件中,从文件中读取数据也是一下子读取所有的数据;
    • 缺点
      • 你想在利用归档添加一个对象,你需要先把所有的数据解档出来,然后再加入你想添加的那个对象,同理,你想删除一个文件中的一个对象也是,需要解档出所有的对象,然后将其删除。性能低这样处理
    1. 基本使用:需要归档的模型类必须要遵守NSCoding协议,然后模型实现类中必须实现两个方法:1>encodeWithCoder -> 归档;2> initWithCoder: - > 解档
    2. 使用注意
      • 如果父类也遵守了NSCoding协议
    应该在encodeWithCoder:方法中加上一句
    [super encodeWithCode:encode]; // 确保继承的实例变量也能被编码,即也能被归档
    
    应该在initWithCoder:方法中加上一句
    self = [super initWithCoder:decoder]; // 确保继承的实例变量也能被解码,即也能被恢复
    
    • 基本使用
    // 1. 自定义模型类Person
    
    // 1.1 Person.h文件
    #import <Foundation/Foundation.h>
    
    // 只要一个自定义对象想要归档,必须要遵守NSCoding协议,并且要实现协议的方法
    @interface Person : NSObject<NSCoding>
    
    @property (nonatomic, assign) int age;
    
    @property (nonatomic, strong) NSString *name;
    
    @end
    
    // 1.2 .m实现文件
    #import "Person.h"
    
    #define KName @"name"
    #define KAge @"age"
    
    @implementation Person
    
    // 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
    // 作用:告诉苹果当前对象中哪些属性需要归档
    - (void)encodeWithCoder:(NSCoder *)aCoder {
        [aCoder encodeObject:_name forKey:KName];
        [aCoder encodeInt:_age forKey:KAge];
    }
    
    // 什么时候调用:当一个对象要解档的时候就会调用这个方法解档
    // 作用:告诉苹果当前对象中哪些属性需要解档
    // initWithCoder什么时候调用:只要解析一个文件的时候就会调用
    - (id)initWithCoder:(NSCoder *)aDecoder {
        #warning  [super initWithCoder]
        if (self = [super init]) {
            // 解档
            // 注意一定要记得给成员属性赋值
          _name = [aDecoder decodeObjectForKey:KName];
          _age = [aDecoder decodeIntForKey:KAge];
        }
        return self;
    }
    
    @end
    
    // 2. 实例 -》基本使用:取 / 存 数据 
    // 归档
     [NSKeyedArchiver archiveRootObject: self.persons toFile:KFilePath];// 将self.persons模型对象数组 
     // 解档       
     _persons = [NSKeyedUnarchiver unarchiveObjectWithFile:KFilePath];
    

    相关文章

      网友评论

          本文标题:IOS数据存储常用方式(二)NSKeyedArchiver

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