• 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"];

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

  • 相关阅读:
    CentOS8下升级Python3.6到3.9
    web service基础知识
    mysql+centos7+主从复制
    saltstack高效运维
    Docker
    python如何配置virtualenv
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    nginx+uWSGI+django+virtualenv+supervisor发布web服务器
    RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
    flask-wtforms
  • 原文地址:https://www.cnblogs.com/LifeTechnologySupporter/p/5016689.html
Copyright © 2020-2023  润新知