zoukankan      html  css  js  c++  java
  • iOS-数据持久化-对象归档

    一、简单说明

    对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为接档,反序列化),

    (对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看)

    对象归档有两种方式:1:对foundation中对象进行归档  2:自定义对象归档

    1、简单对象归档

    使用两个类:NSKeyedArichiver、NSKeyedUnarchiver

    NSString *homeDirectory = NSHomeDirectory();   //获取根目录

    NSString homePath = [homeDirectory stringByAppendingPathComponent:@"自定义文件名,如test.archiver"];

    NSArray *array = @[@"abc", @"123", @12];

    Bool flag = [NSKeyedArichiver archiveRootObject:array toFile:homePath];

    if(flag) {

       NSLog(@"归档成功!");

    }

    读取归档文件的内容:

    NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile: homePath ];

    NSLog(@"%@", array);

    这样就简单了实现了将NSArray对象的归档和解档。

    但是这种归档方式有个缺点,就是一个文件只能保存一个对象,如果有多个对象要保存的话那岂不是有n多个文件,这样不是很适合的,所以有了下面这种归档方式。

    2、自定义内容归档

    归档:

    使用NSData实例作为归档的存储数据

    添加归档的内容---使用键值对

    完成归档

    解归档:

    从磁盘读取文件,生成NSData实例

    根据NSData实例和初始化解归档实例

    解归档,根据key访问value

    NSString *homeDirectory = NSHomeDirectory(); //获取根目录

    NSString homePath = [homeDirectory stringByAppendingPathComponent:@"自定义文件名,如test.archiver"];

    NSMutableData *data = [[NSMutableData alloc] init];

    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

    [archiver encodeFloat:50 forKey:@"age"];

    [archiver encodeObject:@"jack" forKey:@"name"];

    [archiver finishEncoding];  //结束添加对象到data中

    [archiver release];

    [data writeToFile:homePath  atomically:YES];//将data写到文件中保存在磁盘上

    NData *content= [NSData dataWithConenteOfFile:homePath ];

    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:content];

    float age = [unarchiver decodeFloatForKey:@"age"];

    NSString *name = [unarchiver decodeObjectForKey:@"name"];

    好了,就这样,自定义的归档和解归档的使用就这样了。

  • 相关阅读:
    Vue $emit()不触发方法的原因
    java 定时任务之一 @Scheduled注解(第一种方法)
    Dubbo的使用及原理浅析.
    Android App 安全的HTTPS 通信
    详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)
    IDEA 2018集成MyBatis Generator 插件 详解
    自建证书配置HTTPS服务器
    Jsoup(一)Jsoup详解(官方)
    Android使用最小宽度限定符时最小宽度的计算
    可显示行号的log工具
  • 原文地址:https://www.cnblogs.com/LifeTechnologySupporter/p/5016689.html
Copyright © 2011-2022 走看看