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

原文: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!" );  

更多内容请参考《 【Objective-C基础】自定义对象归档
结束!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值