CBNetworking:源码分析

为什么要对AFNetworking进行多一层的封装

对于AFNetworking进行二次封装是很有必要的。事实上,在项目中大量使用第三方网络库是有风险的,因为网络请求的使用遍布整个应用,而一旦该对应的网络库不再更新维护,或者我们有意愿的去更换网络框架,修改将会有着巨大的难以承受的工作量。

这一个框架与其他框架有什么不同

  • 本框架基于AFNetworking3.0的版本进行封装,面向更新的版本。
  • 为网络请求的任务管理做了大量的工作,使得下载上传,或者其他使用环境下的任务管理得以更轻松的实现。
  • 反其道而行,专为Post请求作出了缓存处理,这一部分缓存处理的使用与否,由使用者自行决定。
  • 自定义Get请求的缓存策略,以时间为基准,严格把控缓存的有效性。

接口设计

请求

这里使用了新建NS_ENUM的方式来统一Post和Get接口。

从上面的代码我们可以看到,参数useCache决定着你是否使用Post请求的缓存功能,而即便将其设置为NO,依然会自动开启Get请求的缓存功能。

数据解析方式

上面的NS_ENUM联合上面的方法可以更改数据解析方式,更具灵活性。

文件上传,下载

针对文件的下载和上传的做出专门的设计。

任务管理

由上面的方法中,我们可以看到每一个方法都返回了一个任务对象CBURLSessionTask,这个对象继承于NSURLSessionTask,如此我们可以直接的取到每次进行任务请求的对象,直接对其进行管理。但不止于此,我仍然写了以下的几个接口来更快捷更集中的对其进行管理。

通过这两个方法,我们可以直接取消所有的请求,或者取消单个链接对应的请求。全局性的执行取消操作,更方便。

缓存处理

Post缓存处理

由于苹果官方的NSURLCache不支持Post请求的缓存处理,所有这一部分的缓存处理,我自己通过归档的方式来进行管理。

主要的方法如下:

值得注意的是,每一次进行缓存,都通过HASH的方式对缓存进行了加密,从而达到唯一缓存和更加安全的目的。

Get请求的自定义

按道理,官方已经对于Get请求进行了很完善的缓存处理,为什么我还要自行处理呢?事实上,我并没有自定义这一部分的处理,我仅对于NSURLCache加多了一层封装,从而达到自定义策略的目的,主要的方法如下所示:

小结

更详细的代码请大家点击下载查看,谢谢大家的关注,如果可以,请点个star支持一下,谢谢。

1 收藏 评论

关于作者:Super邦

野生猿类 个人主页 · 我的文章 · 1 ·  

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部