iOS Developer小问题

iOS 归解档的简单实现

2017-07-13  本文已影响39人  新生代农民工No1

序言:

最近因为项目中需要用到自定义模型的归档,所以留意了些归解档的代码。但大多数代码都是写的比较简单模型,所以归解档 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)

获取该类的所有属性 实现NSCoding

在需要归档的自定义类中导入该分类

这里归解档就已经写完,如果你还在一个个得手敲key,Value是不是会崩溃掉!

Demo的链接地址:代码地址

代码中已经把归解档的方法封装成了工具类,简单好用!

上一篇 下一篇

猜你喜欢

热点阅读