一直想总结一下关于iOS的离线数据缓存的方面的问题,然后最近也简单的对AFN进行了再次封装,所有想把这两个结合起来写一下。数据展示型的页面做离线缓存可以有更好的用户体验,用户在离线环境下仍然可以获取一些数据,这里的数据缓存首选肯定是SQLite,轻量级,对数据的存储读取相对于其他几种方式有优势,这里对AFN的封装没有涉及太多业务逻辑层面的需求,主要还是对一些方法再次封装方便使用,解除项目对第三方的耦合性,能够简单的快速的更换底层使用的网络请求代码。这篇主要写离线缓存思路,对AFN的封装只做简单的介绍。
关于XLNetworkApi
XLNetworkApi的一些功能和说明:
- 使用XLNetworkRequest做一些GET、POST、PUT、DELETE请求,与业务逻辑对接部分直接以数组或者字典的形式返回。
- 以及网络下载、上传文件,以block的形式返回实时的下载、上传进度,上传文件参数通过模型XLFileConfig去存取。
- 通过继承于XLDataService来将一些数据处理,模型转化封装起来,于业务逻辑对接返回的是对应的模型,减少Controllor处理数据处理逻辑的压力。
- 自定义一些回调的block
12345678910111213141516/**请求成功block*/typedef void (^requestSuccessBlock)(id responseObj);/**请求失败block*/typedef void (^requestFailureBlock) (NSError *error);/**请求响应block*/typedef void (^responseBlock)(id dataObj, NSError *error);/**监听进度响应block*/typedef void (^progressBlock)(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); - XLNetworkRequest.m部分实现
12345678910111213141516171819#import "XLNetworkRequest.h"#import "AFNetworking.h"@implementation XLNetworkRequest+ (void)getRequest:(NSString *)url params:(NSDictionary *)params success:(requestSuccessBlock)successHandler failure:(requestFailureBlock)failureHandler {//网络不可用if (![self checkNetworkStatus]) {successHandler(nil);failureHandler(nil);return;}AFHTTPRequestOperationManager *manager = [self getRequstManager];[manager GET:url parameters:params success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {successHandler(responseObject);} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {XLLog(@"------请求失败-------%@",error);failureHandler(error);}];} - 下载部分代码
1234567891011121314151617181920212223242526272829303132333435//下载文件,监听下载进度+ (void)downloadRequest:(NSString *)url successAndProgress:(progressBlock)progressHandler complete:(responseBlock)completionHandler {if (![self checkNetworkStatus]) {progressHandler(0, 0, 0);completionHandler(nil, nil);return;}NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];NSProgress *kProgress = nil;NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:&kProgress destination:^[manager downloadTaskWithRequest:request progress:&kProgress destination:^հ据的存储读取相对于其他几种方式有优势,这里对AFN的封装没有涉及太多业务逻辑层面的需求,主要还是对一些方法再次封装方便使用,解除项目对第三方的耦合性,能够简单的快速的更换底层使用的网络请求代码。这篇主要写离线缓存思路,对AFN的封装只做简单的介绍。关于XLNetworkApi
XLNetworkApi的一些功能和说明:
- 使用XLNetworkRequest做一些GET、POST、PUT、DELETE请求,与业务逻辑对接部分直接以数组或者字典的形式返回。
- 以及网络下载、上传文件,以block的形式返回实时的下载、上传进度,上传文件参数通过模型XLFileConfig去存取。
- 通过继承于XLDataService来将一些数据处理,模型转化封装起来,于业务逻辑对接返回的是对应的模型,减少Controllor处理数据处理逻辑的压力。
- 自定义一些回调的block
12345678910111213141516/**请求成功block*/typedef void (^requestSuccessBlock)(id responseObj);/**请求失败block*/typedef void (^requestFailureBlock) (NSError *error);/**请求响应block*/typedef void (^responseBlock)(id dataObj, NSError *error);/**监听进度响应block*/typedef void (^progressBlock)(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); - XLNetworkRequest.m部分实现
12345678910111213141516171819#import "XLNetworkRequest.h"#import "AFNetworking.h"@implementation XLNetworkRequest+ (void)getRequest:(NSString *)url params:(NSDictionary *)params success:(requestSuccessBlock)successHandler failure:(requestFailureBlock)failureHandler {//网络不可用if (![self checkNetworkStatus]) {successHandler(nil);failureHandler(nil);return;}AFHTTPRequestOperationManager *manager = [self getRequstManager];[manager GET:url parameters:params success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {successHandler(responseObject);} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {XLLog(@"------请求失败-------%@",error);failureHandler(error);}];} - 下载部分代码
1234567891011121314151617181920212223242526272829303132333435//下载文件,监听下载进度+ (void)downloadRequest:(NSString *)url successAndProgress:(progressBlock)progressHandler complete:(responseBlock)completionHandler {if (![self checkNetworkStatus]) {progressHandler(0, 0, 0);completionHandler(nil, nil);return;}NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];NSProgress *kProgress = nil;