序言:
最近因为项目中需要用到自定义模型的归档,所以留意了些归解档的代码。但大多数代码都是写的比较简单模型,所以归解档 so easy! 那么问题来了,如果项目中的模型比较复杂,可能里三层外三层,你还愿意key,value的写吗?所以这里决定偷个懒,想了想那就用runtime吧!
为什么 需要用到 归档 解档呢
首先来聊聊归档解档的优势,如果模型很复杂,解析不方便,或者不利于存储数据库,那么归档则是个不错的方式。归档后,模型会以NsDate类型被写进文件中;解档后,这个模型又会被读取出来。不需要解析神马的!
实现 归解档
1,首先,自定义类要遵循协议 <NSCoding>
2.实现自定义类中归档方法:
-(void)encodeWithCoder:(NSCoder *)aCoder;
3.实现自定义类中解档方法:
- (instancetype )initWithCoder:(NSCoder *)aDecoder;
如果自定义模型里面有很多个属性,那么归解档方法里面是不是就会疯狂的写
[aCoderencodeObject:obj forKey:key] 或者 [aDecoder decodeObjectForKey:key] 方法;
所以最简单的实现就是通过运行时取获取当前类里面所有的属性,循环遍历类中所有的属性,并且 根据属性名和属性值依次调用 归解档方法;这里在对属性的赋值与取值时是用的kvc,间接调用可以避免 基础数据类型 不能通过反射机制调用set或者get方法;
下面既是核心代码:
创建一个分类NSObject (Archiving)
在需要归档的自定义类中导入该分类
这里归解档就已经写完,如果你还在一个个得手敲key,Value是不是会崩溃掉!
Demo的链接地址:代码地址
代码中已经把归解档的方法封装成了工具类,简单好用!