网络请求ios开发整理iOS进阶指南

iOS开源网络库YTKNetwork

2016-06-17  本文已影响2659人  52xpz

iOS中基于http协议上传下载一般用大名鼎鼎的网络库AFNetworking,一般在项目中还会对此库进行二次封装,本片文章将介绍唐巧团队开源的基于AFNetworking二次封装的开源库YTKNetworkGitHub - AFNetworking/AFNetworking: A delightful networking framework for iOS

注:本文解析是基于YTKNetwork1.x版本,目前YTKNetwork已经更新到了2.x版本,具体的区别见YTKNetwork 2.0 迁移指南

一、YTKNetwork提供的功能

YTKNetwork除了具备AFNetworking所有功能外,还提供如下高级功能:

1、支持按时间缓存网络请求内容

2、支持按版本号缓存网络请求内容

3、支持统一设置服务器和 CDN 的地址

4、支持检查返回 JSON 内容的合法性

5、支持文件的断点续传

6、支持 block 和 delegate 两种模式的回调方式

7、支持批量的网络请求发送,并统一设置它们的回调(实现在YTKBatchRequest类中)

8、支持方便地设置有相互依赖的网络请求的发送,例如:发送请求A,根据请求A的结果,选择性的发送请求B和C,再根据B和C的结果,选择性的发送请求D。(实现在YTKChainRequest类中)

9、支持网络请求 URL 的 filter,可以统一为网络请求加上一些参数,或者修改一些路径。

10、定义了一套插件机制,可以很方便地为 YTKNetwork 增加功能。猿题库官方现在提供了一个插件,可以在某些网络请求发起时,在界面上显示"正在加载"的 HUD。

具体的使用可以见YTKNetwork github官网,下面着重讲解一下YTKNetwork的架构

二、YTKNetwork原理

1、架构图如下:

2、相关类介绍

1)YTKBaseRequest:网络请求基类,通过成员变量requestOperation发起http请求

2)YTKRequest:单个网络请求类,项目中的网络请求直接继承该类。该类继承于YTKBaseRequest,通过调用YTKNetworkAgent全局单例对象方法- (void)addRequest:(YTKBaseRequest *)request发起网络请求

3)YTKBatchRequest:批量网络请求类,通过此类来实现批量发送请求

4)YTKBatchRequestAgent:管理YTKBatchRequest对象类,该类在实现上是一个全局单例对象

5)YTKChainRequest:串行网络请求类,通过该类来实现有依赖关系的网络请求

6)YTKChainRequestAgent:管理YTKChainRequest对象类,该类在实现上是一个全局单例对象

7)YTKNetworkAgent:网络代理类,该类实际上是一个胶水层,YTKRequest通过方法addRequest管理YTKRequest对象,并且通过AFHTTPRequestOperationManager把YTKRequest代表的url请求路由到AFNetworking里面

由于YTKNetwork基于AFNetworking来实现的,顺便介绍一下AFNetworking相关的类,按功能来说明:

网络请求类:

1)AFURLConnectionOperation:实际发起网络请求与处理网络相应数据的类。该类继承于NSOperation,并且实现了协议NSURLConnectionDelegate、NSURLConnectionDataDelegate、NSSecureCoding、NSCopying

2)AFHTTPRequestOperation:继承于AFURLConnectionOperation,AFHTTPRequestOperationManager调用

序列化与反序列化类

1)AFHTTPRequestSerializer:http请求参数序列化为标准http参数类。该类通过实现协议AFURLRequestSerialization来实现序列化

2)AFJSONRequestSerializer:http请求参数序列化为JSON格式类。继承于AFHTTPRequestSerializer

3)AFPropertyListRequestSerializer:请求参数序列化成application/x-plist格式类。继承于AFHTTPRequestSerializer:http

4)AFHTTPResponseSerializer:响应数据反序列化类,该类通过实现AFURLResponseSerialization协议来实现反序列化

5)AFJSONRequestSerializer:响应数据反序列化为JSON格式类。

6)AFXMLParserResponseSerializer:响应数据反序列化为XML格式类

7)AFPropertyListResponseSerializer:响应数据反序列化为property list格式类

8)AFImageResponseSerializer:响应数据反序列化为UIImage格式类

9)AFCompoundResponseSerializer:暂时不清楚用法

AFHTTPRequestOperationManager:直接给业务层使用的类。业务直接通过该类的Head、Post、Get方法创建请求。该类的

AFHTTPSessionManager:直接给业务层使用的类.通过NSURLSession来实现网络请求

其他类:UIKit目录下的扩展类,可以拿来从网络上加载图片,比如UIImageView+AFNetworking扩展

上一篇下一篇

猜你喜欢

热点阅读