注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

【Objective-C基础】数据持久化--对象归档  

2015-07-29 15:07:57|  分类: iOS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原文:http://www.2cto.com/kf/201310/248330.html
一、数据持久化的方式
1、NSKeyedArchiver--对象归档
2、属性列表化(NSArray、NSDictionary、NSUserDefault)
3、SQlite数据库、CoreData数据库
 其中第一、二种方式针对数据量小的数据,第三种方式针对大数据,归档的文件是加密的,属性列表明文的。
 归档的形式;
 A、对foundation库中对象进行归档
 B、自定义对象的归档(需要实现归档协议: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!");  

结束!
  评论这张
 
阅读(219)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017