美文网首页111ios
YYCache和AFNetworking超强二次封装----实现

YYCache和AFNetworking超强二次封装----实现

作者: MMD_ | 来源:发表于2017-11-23 16:20 被阅读613次

前言

现在大部分为了增强用户体验,都会对服务器返回的数据进行缓存,以不至于在无网状态下显示空白页,之前在项目当中有使用到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

相关文章

网友评论

    本文标题:YYCache和AFNetworking超强二次封装----实现

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