IOS数据存储之归档(NSKeyedArchiver)/解档(NSKeyedUnarchiver)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了IOS数据存储之归档(NSKeyedArchiver)/解档(NSKeyedUnarchiver),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2515字,纯文字阅读大概需要4分钟。
内容图文
前言:
前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档和解档。我们先来回顾一下JAVA是怎么实现保存一个自定义对象的!首先一个自定义对象必须实现Serializable接口,然后把一个对象序列化成二进制数据写入一个byte[]数据或者文件,反之则是从一个二进制数据或者文件中读取二进制数据反序列化成对象,所以我认为ios的归档解档其实就是类似JAVA序列化反序列化的过程,下面写个程序来尝试一下。
先测试下基础类型:
// 归档 NSString *Path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; //字符串数据 NSString * string =@"who is lcj?"; NSString *filename = [Path stringByAppendingPathComponent:@"testString"]; [NSKeyedArchiver archiveRootObject:string toFile:filename]; NSString *string1=[NSKeyedUnarchiver unarchiveObjectWithFile:filename]; NSLog(@"testString---%@",string1); //集合数组 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"who", @"islcj", nil]; filename = [Path stringByAppendingPathComponent:@"testArray"]; [NSKeyedArchiver archiveRootObject:array toFile:filename]; NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithFile: filename]; NSLog(@"testArray---%@",arr); //字典保存 filename = [Path stringByAppendingPathComponent:@"testNSDictionary"]; NSDictionary *dictionary=[NSDictionary dictionaryWithObject:@"whoislcj" forKey:@"name"]; [NSKeyedArchiver archiveRootObject:dictionary toFile:filename]; NSDictionary *dictionary1=[NSKeyedUnarchiver unarchiveObjectWithFile: filename]; NSLog(@"dictionary---%@",dictionary1);
上面已经说了JAVA要想实现序列化反序列化必须实现Serializable接口,那么iOS呢?iOS需要实现NSCoding协议,
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject<NSCoding> @property (nonatomic,strong)NSString *name; @end
Person.m
#import " Person.h " @implementation Person #pragma mark - NSCoding Delegate - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; } - (id)initWithCoder:(NSCoder *)aDecoder { self.name = [aDecoder decodeObjectForKey:@"name"]; return self; } @end
具体实现:
// 自定义对象类型 Person *person=[[Person alloc]init]; person.name=@"whoislcj"; filename = [Path stringByAppendingPathComponent:@"testObject"]; [NSKeyedArchiver archiveRootObject:person toFile:filename]; Person *tempPerson = [NSKeyedUnarchiver unarchiveObjectWithFile: filename]; NSLog(@"tempPerson:%@",tempPerson.name);
归档如何删除
// 删除归档文件 NSFileManager *defaultManager = [NSFileManager defaultManager]; if ([defaultManager isDeletableFileAtPath:filename]) { [defaultManager removeItemAtPath:filename error:nil]; }
缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压。所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据。
原文:http://www.cnblogs.com/whoislcj/p/5481123.html
内容总结
以上是互联网集市为您收集整理的IOS数据存储之归档(NSKeyedArchiver)/解档(NSKeyedUnarchiver)全部内容,希望文章能够帮你解决IOS数据存储之归档(NSKeyedArchiver)/解档(NSKeyedUnarchiver)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。