美文网首页
ios 归档与解档

ios 归档与解档

作者: xiong_xin | 来源:发表于2019-04-28 10:59 被阅读0次

    将对象进行归档或者解档时,需要遵循NSCoding协议,对象必须实现encodeWithCoder方法和initWithcoder方法用于对象的编码和解码。遵循NSCoding的协议可以被序列化和反序列化

    一、 在需要归档的类中遵循归档协议(NSCoding)
    @interface Program : NSObject<NSCoding>
    //需要归档的属性
    @property (nonatomic, strong) NSString *name;
    @property (nonatomic, assign) NSInteger age;
    @end
    
    二、在归档对象的.m方法中实现NSCoding的协议方法
    //方法一:普通方式实现
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
        //告诉系统归档的属性是哪些
        [aCoder encodeObject:self.name forKey:@"name"];
        [aCoder encodeInteger:self.age forKey:@"age"];
    }
    
    - (instancetype)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super init];
        if (self) {
            //解档
            self.name = [aDecoder decodeObjectForKey:@"name"];
            self.age = [aDecoder decodeIntegerForKey:@"age"];
        }
        return self;
    }
    //方法二:使用runtime方式实现
    ...之后补充
    
    三、在Controller中实现具体的存取操作
    - (IBAction)save:(UIButton *)sender {
        Person *person = [[Person alloc] init];
        person.name = @"Frank";
        person.age = 18;
        
        //这里以temp路径为例,存到temp路径下
        NSString *temp = NSTemporaryDirectory();
        NSString *filePath = [temp stringByAppendingPathComponent:@"obj.data"]; //注:保存文件的扩展名可以任意取,不影响。
        NSLog(@"%@", filePath);
        //归档
        [NSKeyedArchiver archiveRootObject:person toFile:filePath];
    }
    
    - (IBAction)read:(UIButton *)sender {
        //取出归档的文件再解档
        NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"obj.data"];
        //解档
        Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        NSLog(@"name = %@, age = %ld",person.name,person.age);
    }
    

    优点:可以创建自己想要的数据模型,然后统一以模型方式存储。比属性列表过分依赖key要省心

    缺点:归档的形式保存数据,只能一次性归档保存和一次性解压,只能针对少量数据,并且对数据处理比较笨拙。即如果想要改动数据的一小部分,还需要解压整个数据或者归档整个数据,没有属性列表速度快(NSUserDefault)https://www.jianshu.com/p/d24dd98bc9dc
    ,因为他每次都要把数据保存到闪存中。

    相关文章

      网友评论

          本文标题:ios 归档与解档

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