zoukankan      html  css  js  c++  java
  • IOS --- 对象归档

    原文:http://blog.sina.com.cn/s/blog_7124765801015imx.html

    IOS提供的数据持久化方式有:SQLite、CoreData、属性列表、NSUserDefault、对象归档。

    这里来简单介绍下对象归档:

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

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

    对象归档有两种方式: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"];

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

  • 相关阅读:
    并查集扩展域 —— [NOI2001]食物链
    C++ P4568 [JLOI2011]飞行路线 ---- Dijkstra+分层图
    单源最短路径--Dijkstra
    链式前向星学习
    深度理解链式前向星
    「学习笔记」链式前向星
    【转】到底EJB是什么
    什么是JPA
    把nc v6的源码看懂
    用友--扩展插件要怎么做
  • 原文地址:https://www.cnblogs.com/whqios/p/4572406.html
Copyright © 2011-2022 走看看