IOS归解档

原文链接:http://blog.csdn.net/richard_rufeng/article/details/17640551

归档也叫序列化,是将文件存在硬盘,解档是从硬盘还原

5种方式:

第一种、使用属性列表进行归档

如果对象是NSString,NSDictionary,NSArray,NSData或者NSNumber,可以使用writeToFile:atomically方法将数据写到文件,注意这种方式是明文

sample:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. NSArray *array = @[@"abc",@"123",@23.4];  
  2. if ([array writeToFile:@"text.plist" atomically:YES])  
  3. {  
  4.     NSLog(@"success");  
  5. }  
  6. NSArray *arr2=[NSArray arrayWithContentsOfFile:@"text.plist"];  
  7. NSLog(@"%@",arr2);  

第二、NSKeyedArchiver--对象归档,数据会加密

1、对于NSArray或者NSDictionary sample code:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1.  /***归档对象****/  
  2.  NSArray *array = @[@"abc",@"123",@23.4];  
  3.  NSString *homePath = NSHomeDirectory();  
  4.  NSString *path = [homePath stringByAppendingPathComponent:@"test.arc"];  
  5.    
  6. // BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:path];  
  7.  BOOL success=[NSKeyedArchiver archiveRootObject:array toFile:path];  
  8.  if (success) {  
  9.      NSLog(@"archive success");  
  10.  }  
  11.    
  12.  /***解归档****/  
  13.  NSArray *array2 =[NSKeyedUnarchiver unarchiveObjectWithFile:path];  
  14. SLog(@"%@",array2);  

结果:

success

2013-12-28 22:14:25.353 ArchiverDemo1[1206:303] (

    abc,

    123,

    "23.4"

)

2、如果是其他类型的对象存储到文件,可以利用NSKeyedArchiver类创建带键的档案来完成

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. NSString *homePath = NSHomeDirectory();  
  2. NSString *path = [homePath stringByAppendingPathComponent:@"archiver2.archiv"];  
  3. NSMutableData *data = [NSMutableData data];  
  4. NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];  
  5. NSArray *array = @[@"jack",@"tom"];  
  6. [archiver encodeInt:100 forKey:@"age"];  
  7. [archiver encodeObject:array forKey:@"names"];  
  8. [archiver finishEncoding];  
  9. [archiver release];  
  10.   
  11. BOOL success = [data writeToFile:path atomically:YES];  
  12. if (success) {  
  13.     NSLog(@"archive success");  
  14. }  
  15.   
  16. /***解归档对象**/  
  17.   
  18. NSData *data2 = [NSData dataWithContentsOfFile:path];  
  19. NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data2];  
  20. int age = [unArchiver decodeIntForKey:@"age"];  
  21. NSArray *names = [unArchiver decodeObjectForKey:@"names"];  
  22. [unArchiver release];  
  23. NSLog(@"age=%d,names=%@",age,names);  


3、自定义对象进行归档,需要实现归档协议NSCoding两个方法

对属性编码,归档的时候会调用

- (void)encodeWithCoder:(NSCoder *)aCoder

//对属性解码,解归档调用

- (id)initWithCoder:(NSCoder *)aDecoder 

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. //对属性编码,归档的时候会调用  
  2. - (void)encodeWithCoder:(NSCoder *)aCoder {  
  3.     [aCoder encodeInt:_age forKey:AGE];  
  4.     [aCoder encodeObject:_name forKey:NAME];  
  5.     [aCoder encodeObject:_email forKey:EMAIL];  
  6.     [aCoder encodeObject:_password forKey:PASSWORD];  
  7.       
  8. }  
  9.   
  10. //对属性解码,解归档调用  
  11. - (id)initWithCoder:(NSCoder *)aDecoder {  
  12.     self = [super init];  
  13.     if (self != nil) {  
  14.         _age = [aDecoder decodeIntForKey:AGE];  
  15.         self.name = [aDecoder decodeObjectForKey:NAME];  
  16.         self.email = [aDecoder decodeObjectForKey:EMAIL];  
  17.         self.password = [aDecoder decodeObjectForKey:PASSWORD];  
  18.     }  
  19.     return self;  
  20. }  


第三种:NSUserDefaults

sample code:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. [[NSUserDefaults standardUserDefaults] setObject:authData forKey:@"SinaWeiboAuthData"];  
  2. [[NSUserDefaults standardUserDefaults] synchronize];  

第四种、SQlite数据库、CoreData数据库


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值