zoukankan      html  css  js  c++  java
  • iOS文档序列化(对象归档)

    对象归档:

    概念:

    对象归档是指将对象写入文件保存在硬盘,当再次又一次打开程序时,能够还原这些对象。也称:对象序列化、对象持久化。


    数据持久性的方式(事实上就是3类)

    1,NSKeyedArchiver——对象归档

    2,NSUserDefaults  3,属性列表 

    4,SQLite数据库  5,Core Data数据库


    归档方式:

    对Foundation库中对象进行归档

    自己定义对象进行归档(须要实现归档协议,NSCoding)


    归档与属性列表的差别:

    1,归档后的文件是加密的,属性列表是明文的。

    2,属性列表不能存储自己定义对象类型,归档能够。



    代码实现:

    //对象归档,对象反归档
    int main(int argc, char * argv[])
    {
        @autoreleasepool {
    //        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
            //归档(序列化)
            NSArray *array = @[@"abc",@"123",@1234];
            
            NSString *homePath = NSHomeDirectory();
            NSLog(@"homePath :%@",homePath);
            NSString *path = [homePath stringByAppendingPathComponent:@"test.archive"];  //文件和扩展名随便取
            
            BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:path];
            if (success) {
                NSLog(@"archive success");
            }
        }
        return 0;
    }


    这是就生成了一个加密文件。

    打开

    6270 6c69 7374 3030 d401 0203 0405 081c
    1d54 2474 6f70 5824 6f62 6a65 6374 7358
    2476 6572 7369 6f6e 5924 6172 6368 6976
    6572 d106 0754 726f 6f74 8001 a609 0a12
    1314 1555 246e 756c 6cd2 0b0c 0d0e 5624
    636c 6173 735a 4e53 2e6f 626a 6563 7473
    8005 a30f 1011 8002 8003 8004 5361 6263
    5331 3233 1104 d2d2 1617 181b 5824 636c
    6173 7365 735a 2463 6c61 7373 6e61 6d65
    a219 1a57 4e53 4172 7261 7958 4e53 4f62
    6a65 6374 574e 5341 7272 6179 1200 0186
    a05f 100f 4e53 4b65 7965 6441 7263 6869
    7665 7208 1116 1f28 3235 3a3c 4349 4e55
    6062 6668 6a6c 7074 777c 8590 939b a4ac
    b100 0000 0000 0001 0100 0000 0000 0000
    1e00 0000 0000 0000 0000 0000 0000 0000


     

    int main(int argc, char * argv[])
    {
        @autoreleasepool {
    //        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
            //归档(序列化)
    //        NSArray *array = @[@"abc",@"123",@1234];
    //        
    //        NSString *homePath = NSHomeDirectory();
    //        NSLog(@"homePath :%@",homePath);
    //        NSString *path = [homePath stringByAppendingPathComponent:@"test.archive"];  //文件和扩展名随便取
    //        
    //        BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:path];
    //        if (success) {
    //            NSLog(@"archive success");
    //        }
            
            //解归档(反序列化)
            NSString *homePath = NSHomeDirectory();
            NSString *path = [homePath stringByAppendingPathComponent:@"test.archive"];
            NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
            NSLog(@"NSKeyedUnarchiver:%@",array);
        }
        return 0;
    }
    


    这种方法的缺陷:

    一个对象归档成一个文件,当对象许多时很麻烦。

    以下的方式能够解决问题:

    归档:

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

    2,加入归档的内容(设置key和value)

    3,完毕归档

    4,将归档数据存入磁盘中


    解归档:

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

    2,依据Data实例创建和初始化解归档实例

    3,解归档,依据key訪问value的值。



  • 相关阅读:
    二叉树的最大深度与最小深度
    【C++学习笔记】由 const char* 引出的一系列问题
    【C++学习笔记】标准库容器Vector可变长度实现原理
    Python数据可视化之Matplotlib学习笔记
    python读取excel文件—xlrd
    ubuntu14.04下嵌入式工作环境搭建
    ubuntu14.04下交叉编译器的安装
    挂载nfs系统问题之: Root-NFS: Server returned error -13 while mounting
    关于开发板不能ping通外网IP
    Socket的协议地址属性
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4487536.html
Copyright © 2011-2022 走看看