美文网首页iOSiOS DeveloperiOS程序猿
改造YTKNetWork(迁移到AF3.0)

改造YTKNetWork(迁移到AF3.0)

作者: NiubilityLeo | 来源:发表于2016-06-14 11:07 被阅读740次

    YTKNetWork是什么?

    YTKNetwork 是猿题库 iOS 研发团队基于 AFNetworking 封装的 iOS 网络库,其实现了一套 High Level 的 API,提供了更高层次的网络访问抽象。YTKNetwork 现在同时被使用在猿题库公司的所有产品的 iOS 端,包括:猿题库小猿搜题猿辅导粉笔直播课

    YTKNetWork的一些特性

    YTKNetwork 的基本的思想是把每一个网络请求封装成对象。所以使用 YTKNetwork,你的每一个请求都需要继承YTKRequest类,通过覆盖父类的一些方法来构造指定的网络请求。

    把每一个网络请求封装成对象其实是使用了设计模式中的 Command 模式,它有以下好处:

    • 将网络请求与具体的第三方库依赖隔离,方便以后更换底层的网络库。
    • 方便在基类中处理公共逻辑,例如猿题库的数据版本号信息就统一在基类中处理。
    • 方便在基类中处理缓存逻辑,以及其它一些公共逻辑。
    • 方便做对象的持久化。

    为什么要对YTKNetWork进行改造

    YTKNetWork其实是对AF的二次封装,他加入了缓存,验证,批量请求等功能。但是为了兼容ios 6,YTKNetWork还是基于AF 2.X的。如今AF3.0已经出来很久了,版本也到了3.1x,原来的2.x版本对ios8,9已经有些乏力,会偶尔出现闪退。并且AF 3.0基于URlSession,请求速度会更快,对服务器的负担也减轻,迁移势在必行。

    改造的原理

    • 首先要弄清AF从2.0到3.0的变化,详情可以参考这篇迁移指南:AFNetworking 3.0迁移指南

    • 我们可以看出主要的变化是取消了NSURLConnection,取而代之的是NSURLSession。之前基于NSURLConnection的请求,AF自己封装了AFURLConnectionOperation,但是AF3.0,AF并没有对NSURLSessionDataTask去做封装。在AF2.x中,封装的Operation中是包含response的,一个operation对应一个response。但是现在AF3.0没有这样去封装,这里是改造的一大难点。YTKAF对于AF进行了再次封装,他将Request和response通过Operation绑定了起来,所有的请求基于YTKBaseRequest:

    • 接下来就是对这五个属性的改造,改造前:

    可以看出都是基于operation去获取response的。现在我们没有了operation怎么办呢,我的解决方案是在回调的时候,把response赋值给自己的YTKBaseRequest的response属性,在YTKNetworkAgent中改造:

    • 于是这五个属性改造后变为:

    responseData不需要get方法了,直接从NSDataTask的回调中获取到。

    改造后续

    做完这些后,其他的工作主要是对YTKNetworkAgent中的AFURLConnectionOperation都替换成NSURLSessionDataTask,然后一些AF老的API替换成最新的基于NSURLSession的就行了。详情的话可以下载我的代码看下面是github传送门:(https://github.com/cvby/LZNetworking) (如果可以话给我打个星哦)

    感谢&参考

    YTKNetworking:https://github.com/yuantiku/YTKNetwork
    AFNetworking:https://github.com/AFNetworking/AFNetworking

    相关文章

      网友评论

        本文标题:改造YTKNetWork(迁移到AF3.0)

        本文链接:https://www.haomeiwen.com/subject/pdkbrttx.html