NSKeyedUnarchiver的简单使用

闲扯

刚下地铁的时候阿根廷和美国开场3分钟,拉维奇在梅西的挑传下进球。刚刚梅西任意球世界波。中场休息的时候准备写一篇博客。

封装的缘由

每一个项目登录的时候都要获取一些信息,之前我们的项目把这些信息保存在了plist文件里。我觉得这个是很麻烦的。面对这些东西,我一直都想用一句话解决,无论是plist还是NSKeyedUnarchiver。所以比较闲的时候封装了这个类。

功能

其实功能和单独使用NSKeyedUnarchiver没有太大的差别,可能很多人都会选择自己去写,而不是去封装出来。毕竟代码量并不是很多。我想唯一的一个比较稍微好一点的功能就是能够保存你写的Model类。

代码

保存一个model类


Model *model = [[Model alloc] init]; model.name = @"zhangsan"; model.age = 100; model.weight = 100.99; model.value = @10; model.mutableArray = [[NSMutableArray alloc] initWithObjects:@"zhangsan", @"lisi", @"wangwu", nil]; model.dict = @{ @"name": @"zhaolasdasdsadiu" }; [ArchiveData saveValue:model WithKey:@"model"];


取出这个model

Model *archiveModel = [ArchiveData takeModelValueWithKey:@"model" WithClass:@"Model"]; NSLog(@"%@,%d,%f,%@,%@,%@", archiveModel.name, archiveModel.age, archiveModel.weight, archiveModel.value, archiveModel.mutableArray, archiveModel.dict);


保存一个字典

NSDictionary *dict = @{ @"zhangsan": @"lisi" }; [ArchiveData saveValue:dict WithKey:@"dict"];


取出一个字典

NSDictionary *archiveDict = [ArchiveData takeValueWithKey:@"dict"]; NSLog(@"archiveDict=%@", archiveDict);


保存一个NSNumber类型

NSNumber *number = @100; [ArchiveData saveValue:number WithKey:@"number"];


取出一个NSNumber类型

NSNumber *archiveNumber = [ArchiveData takeValueWithKey:@"number"]; NSLog(@"archiveNumber=%@", archiveNumber);


源代码分析

保存Model类

当你保存一个model对象的时候,代码首先使用runtime得到了model类的所有属性和属性值。将这些键值对放入了一个字典当中。然后对这个字典进行保存。所以保存下来的不是一个model对象,而是一个字典。
保存过以后你就可以取出这个model,你传递的参数有两个一个是保存时候的key,另外一个是Model的Name。代码接收到Model的Name 的时候使用runtime得到了这个类。然后使用key取出我们保存的字典,使用YYmodel把字典赋值给了model。
这是保存Model类的大致流程。

其它的数据类型

保存这些数据类型,你需要看一下NSKeyedUnarchiver的api。代码在这里做的只是将拿到的数据保存到了一个指定的目录下。

意义

可能很多人都会觉得封装出来这个类并没有什么太大的意义。但是怎么说,至少在一定程度上你使用这个类,可以减少你的代码量和逻辑的判断。很多时候你只需要保存,取出使用就可以了。
对于用户信息的保存,你可以在appdelegate里取出数据赋值给model,在其它地方直接使用或者更改信息的内容。

地址

点击进入github查看源码
你也可以使用pod 'ArchiveData', '~> 0.0.1'在项目里使用这个类。

你可能感兴趣的:(NSKeyedUnarchiver的简单使用)