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的值。



  • 相关阅读:
    已安装 SQL Server 2005 Express 工具。若要继续,请删除 SQL Server 2005 Express 工具
    超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
    C#微信公众号开发 -- (七)自定义菜单事件之VIEW及网页(OAuth2.0)授权
    C#微信公众号开发 -- (六)自定义菜单事件之CLICK
    C#微信公众号开发 -- (五)自定义菜单创建
    C#微信公众号开发 -- (四)获取API调用所需的全局唯一票据access_token
    C#微信公众号开发 -- (三)用户关注之后自动回复
    C#微信公众号开发 -- (二)验证成为开发者
    linux下删除大量文件提示参数过长解决办法
    Linux 远程连接sftp与ftp
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4487536.html
Copyright © 2011-2022 走看看