对象归档 归档最好定义成宏,这样笔误很好发现.

对象归档是指将对象写入文件保存在硬盘上,当再次重新打开程序时,可以还原这些对象.你也可以称它为对象序列化,对象持久化.

在项目中很实用.

-数据持久性的方式

NSKeydeArchiver-----对象归档

NSUserDefaults  (属性列表)

属性列表花( NSArray,NSDictionary 保存文件)

SQlite 数据库, Core Data

-归档的形式

对 Foundation 库中对象进行归档

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

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


归档后的文件为二进制加密的,即使用 UE 也无法正常阅读


#defin NAME @"name"


[aCoder encodObject: _name forKey:NAME];


/*____________________________第一种形式________________________________*/

        

        /****************对象归档********************/

        //对象------>文件

        

        /*

        NSArray *array = [NSArray arrayWithObjects:@"zhangsan",@"lisi",@"中文", nil];

        //归档保存的文件路径

        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.arc"];

        

        //归档对象

        BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:filePath];

        

        if (success) {

            NSLog(@"归档成功");

        }

        */

        

        

        /****************解归档********************/

        

        /*

        //文件----->对象

        //归档保存的文件路径

        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.arc"];

        

        //解归档

        NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

        

        for (NSString *s in array) {

            NSLog(@"%@",s);

        }

         */

        

        

/*____________________________第二种形式________________________________*/        

        

        /*

        

        NSArray *array = [NSArray arrayWithObjects:@"zhangsan",@"lisi",@"中文", nil];

        

        //NSMutableData用于存储归档对象中的数据

        NSMutableData *data = [NSMutableData data];

        //创建归档对象

        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

        

        //编码数据和对象

        [archiver encodeObject:array forKey:@"array"];

        [archiver encodeInt:100 forKey:@"scope"];

        [archiver encodeObject:@"jack" forKey:@"name"];

        //....

        

        //完成归档,将归档数据填充至data中,此时data中已经存储了归档对象的数据

        [archiver finishEncoding];

        [archiver release];

        

        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"ar.text"];

        //将归档数据写入文件

        BOOL success = [data writeToFile:filePath atomically:YES];

        if (success) {

            NSLog(@"arichiver success");

        }

         

        */

        NSString *filePath = [NSHomeDirectory()stringByAppendingPathComponent:@"ar.text"];



        //读取归档数据

        NSData *data = [[NSDataalloc] initWithContentsOfFile:filePath];

        

        //创建解归档对象,对data中的数据进行解归档

        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiveralloc] initForReadingWithData:data];

        

 //解归档,还原数据

        NSArray *array = [unarchiver decodeObjectForKey:@"array"];

        int scope = [unarchiver decodeIntForKey:@"scope"];

        NSString *name = [unarchiver decodeObjectForKey:@"name"];

        

        NSLog(@"array=%@",array);

        NSLog(@"scope=%d",scope);

        NSLog(@"name=%@",name);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值