前言
现在大部分为了增强用户体验,都会对服务器返回的数据进行缓存,以不至于在无网状态下显示空白页,之前在项目当中有使用到FMDB进行离线缓存,虽然不是很复杂,但使用起来还是比较蛋痛的;
YYKit
之前有看到国内很牛逼的90后作者写了YYKit,非常的强大,不论是对性能还是各方面的需求,不久我就把项目的组建换成了YYKit, 删除了SDWebImag,MJExtension....等等一系列相关的组建直接取代,YYKit具体再次就不多说了,我会出一篇相关的文章来谈谈我的理解;
一下是对YYCache和AFNetworking的二次封装,常见的有GET、POST、文件上传/下载、网络状态监测的功能,实现在网络数据的自动缓存
网络请求部分对AFN的简单封装
/**
* GET请求,无缓存
*
* @param URL 请求地址
* @param parameters 请求参数
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)GET:(NSString *)URL
parameters:(id)parameters
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure;
/**
* GET请求,自动缓存
*
* @param URL 请求地址
* @param parameters 请求参数
* @param responseCache 缓存数据的回调
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)GET:(NSString *)URL
parameters:(id)parameters
responseCache:(MLHttpRequestCache)responseCache
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure;
/**
* POST请求,无缓存
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)POST:(NSString *)URL
parameters:(id)parameters
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure;
/**
* POST请求,自动缓存
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)POST:(NSString *)URL
parameters:(id)parameters
responseCache:(MLHttpRequestCache)responseCache
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure;
/**
* 上传文件
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)uploadFileWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
filePath:(NSString *)filePath
progress:(MLHttpProgress)progress
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure;
/**
* 上传单/多张图片
*
* @param URL 请求地址
* @param parameters 请求参数
* @param name 图片对应服务器上的字段
* @param images 图片数组
* @param fileNames 图片文件名数组, 可以为nil, 数组内的文件名默认为当前日期时间"yyyyMMddHHmmss"
* @param imageScale 图片文件压缩比 范围 (0.f ~ 1.f)
* @param imageType 图片文件的类型,例:png、jpg(默认类型)....
* @param progress 上传进度信息
* @param success 请求成功的回调
* @param failure 请求失败的回调
*
* @return 返回的对象可取消请求,调用cancel方法
*/
+ (__kindof NSURLSessionTask *)uploadImagesWithURL:(NSString *)URL
parameters:(id)parameters
name:(NSString *)name
images:(NSArray<UIImage *> *)images
fileNames:(NSArray<NSString *> *)fileNames
imageScale:(CGFloat)imageScale
imageType:(NSString *)imageType
progress:(MLHttpProgress)progress
success:(MLHttpRequestSuccess)success
failure:(MLHttpRequestFailed)failure;
/**
* 下载文件
*
* @param URL 请求地址
* @param fileDir 文件存储目录(默认存储目录为Download)
* @param progress 文件下载的进度信息
* @param success 下载成功的回调(回调参数filePath:文件的路径)
* @param failure 下载失败的回调
*
* @return 返回NSURLSessionDownloadTask实例,可用于暂停继续,暂停调用suspend方法,开始下载调用resume方法
*/
+ (__kindof NSURLSessionTask *)downloadWithURL:(NSString *)URL
fileDir:(NSString *)fileDir
progress:(MLHttpProgress)progress
success:(void(^)(NSString *filePath))success
failure:(MLHttpRequestFailed)failure;
YYCache简单封装
/**
* 缓存网络数据
*/
+ (void)saveHttpCache:(id)httpCache forKey:(NSString *)key;
/**
* 取出缓存的数据
*/
+ (id)getHttpCacheForKey:(NSString *)key;
/**
* 获取网络缓存的总大小 bytes(字节)
*/
+ (NSInteger)getAllHttpCacheSize;
/**
* 删除所有网络缓存,
*/
+ (void)removeAllHttpCache;
自动缓存例子
[MLNetworkHelper GET:url parameters:nil responseCache:^(id responseCache) {
//加载缓存数据
} success:^(id responseObject) {
//请求成功
} failure:^(NSError *error) {
//请求失败
}];
参考:http%3A%2F%2Fwww.jianshu.com%2Fp%2Fc695d20d95cb
网友评论