• objective C中数据持久化方式1--对象归档


    第一、数据持久化的方式:

    NSKeyedArchiver--对象归档

    属性列表化(NSArray、NSDictionary、NSUserDefault)

    SQlite数据库、CoreData数据库

    其中第一、二种方式针对数据量小的数据,第三种方式针对大数据,归档的文件是加密的,属性列表明文的。

    归档的形式;

    对foundation库中对象进行归档

    自定义对象的归档(需要实现归档协议:NSCoding)

    第二 最简单归档和解归档的实现代码:

        @autoreleasepool {
            NSString *homeDictory=NSHomeDirectory();
            NSArray *array=[NSArray arrayWithObjects:@"one",@"two",@"three",nil];
            NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/test.archive"];
            if(![NSKeyedArchiver archiveRootObject:array toFile:homePath])
            {
                NSLog(@"归档失败");
            }else
            {
                NSArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:homePath];
                NSLog(@"%@",data);
            
            }
            
            NSLog(@"Hello, World!");
            
        }

    第四、复杂的内容归档

    使用NSData实例作为归档的存储数据,添加归档的内容(设置key和value),完成归档,将归档内容存入磁盘

    解归档步骤:从磁盘读取文件,生成NSData实例,根据data实例创建或初始化归档实例,解归档,根据key访问value的值

            NSString *homeDictory=NSHomeDirectory();
            NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/usertest.archive"];
            
            NSMutableData *data=[NSMutableData data];
            NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
            
            NSArray *nameArray=[NSArray arrayWithObjects:@"andy",@"yang", nil];
            [archiver encodeInt:100 forKey:@"age"];
            [archiver encodeObject:nameArray forKey:@"names"];
            [archiver finishEncoding];
            [archiver release];
            
            if ([data writeToFile:homePath atomically:YES])
            {
    
                NSData *data2=[NSData dataWithContentsOfFile:homePath];
                NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data2];
                int age=[unarchiver decodeIntForKey:@"age"];
                NSArray *array2=[unarchiver decodeObjectForKey:@"names"];
                NSLog(@"%d",age);
                NSLog(@"%@",array2);
                [unarchiver release];
            } else
            {
                
                NSLog(@"write to file wrong");
            }
                    
            NSLog(@"Hello, World!");
            
        }
    


  • 相关阅读:
    avalon.js 多级下拉框实现
    提取 ECharts 中的svg地图信息
    avalon.js实践 svg地图配置工具
    基于HTML Canvas实现“指纹识别”技术
    HTML5 Canvas指纹及反追踪介绍
    百度Openrasp开源的应用运行时自我保护产品,安装教程。
    浏览器指纹实现
    centos监控web目录www下的文件是否被黑、挂马的脚本
    Linux下文件完整性监控工具Tripwire详解
    在CentOS 7上使用Tripwire监控和检测修改的文件
  • 原文地址:https://www.cnblogs.com/james1207/p/3358202.html
Copyright © 2020-2023  润新知