关于MKNetworking自己维护
关于MKNetworking自己维护
个人比较偏向MKNetworking, 因为在小项目里这个网络请求框架可以说是很轻量级。但是里边有一部分功能缺失或者是功能富余, 以及需要优化的地方。 所以决定自己来维护一个MK的repo以便自己使用。
在GITHUB : MKNetworking-DLProtecting这里大家可以看到源码以及DEMO工程。
0.INIT
创建Engin
NSDictionary * customHeader = @{
@"version" : @"0.0.1",
@"channel" : @"appleStore"
};
MKNetworkEngine * engin = [[MKNetworkEngine alloc] initWithHostName:@"api.devdylan.com" apiPath:@"MKNetFrame" customHeaderFields:customHeader]; // 使用缓存
[engin useCache];- 创建Operation并添加回调
- 执行
1.GET
// - GET /DOWNLOAD - //
// 使用operationWithPath: 创建operation, 会自动拼接engin的HOST与apiPath等
MKNetworkOperation * operation = [engin operationWithPath:@"Student.json" params:nil httpMethod:@"GET" ssl:NO];
// 使用operationWithURLString: 创建operation, 不会拼接engin的HOST与apiPath
MKNetworkOperation * operation_url = [engin operationWithURLString:@"http://api.devdylan.com/MKNetFrame/Student.json" params:nil httpMethod:@"GET"];
NSLog(@"%@", operation.url);
NSLog(@"%@", operation_url.url);
[operation addCompletionHandler:^(MKNetworkOperation *completedOperation) {
// 这里处理请求正确的时候
NSLog(@"%@", completedOperation.responseJSON);
if ([completedOperation isCachedResponse]) {
// 你现在得到的是缓存中的数据
} else {
// 你现在得到的是服务器的数据
}
} errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {
// 这里返回服务器级的错误或者是JSON解析等错误.
NSLog(@"%@", completedOperation.error);
}];
// 执行当前网络请求
[engin enqueueOperation:operation];
2.POST
// - POST / UPLOAD - //
MKNetworkOperation * operation_post = [engin operationWithPath:@"Student.json" params:nil httpMethod:@"POST" ssl:NO];
[operation_post addCompletionHandler:^(MKNetworkOperation *completedOperation) {
// 这里处理请求正确的时候
NSLog(@"%@", completedOperation.responseJSON);
} errorHandler:^(MKNetworkOperation *completedOperation, NSError *error) {
// 这里返回服务器级的错误或者是JSON解析等错误.
NSLog(@"%@", completedOperation.error);
}];
[engin enqueueOperation:operation_post forceReload:YES]; // 设置不读缓存
3.UPLOAD
// 添加路径下文件
[operation_post addFile:@"FILE PATH" forKey:@"image.png"];
// 添加Data
[operation_post addData:[NSData data] forKey:@"image2.png"];
[operation_post onUploadProgressChanged:^(double progress) {
// 上传进度
}];
4.DOWNLOAD
// 下载文件时, 添加下载流
[operation addDownloadStream:[NSOutputStream outputStreamToFileAtPath:@"downloadPath/image.png" append:YES]];
[operation onDownloadProgressChanged:^(double progress) {
// 下载进度
}];
5.FORCELOAD
[engin enqueueOperation:operation_post forceReload:YES]; // 设置不读缓存
6.FREEZABLE
// 设置当前operation冻结
[operation_post setFreezable:YES];
// 解除冻结
[operation_post setFreezable:NO];
7.OTHERS
[operation_post onNotModified:^{
// 在服务器304时调用
}];
// 取消请求
[operation_post cancelOperation];
// 只在WIFI情况下请求, 默认为NO
engin.wifiOnlyMode = YES;
// 取消该引擎下所有的网络请求
[engin cancelAllOperation];
// 移除某一个网络请求
[engin removeOperation:operation_post];
// 清空缓存
[engin emptyCache];
[engin setReachabilityChangedHandler:^(NetworkStatus statu) {
// 处理网络状态发生变化的回掉
}];
[operation_post setOperationStateChangedHandler:^(MKNetworkOperationState state) {
// 当operation状态发生变化时回掉到这里
}];
关于MKNetworking自己维护的更多相关文章
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 开发者最爱的Firebug停止更新和维护
近日,Firebug团队在其官网上宣布,Firebug将不再继续开发和维护,并邀请大家使用Firefox的内置开发工具. Firebug最初是2006年1月由Joe Hewitt编写, ...
- ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项(红字需要留意)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- ola.hallengren的SQL Server维护脚本
ola.hallengren的SQL Server维护脚本 下载地址 http://files.cnblogs.com/files/lyhabc/ola.hallengrenMaintenanceSo ...
- 数据库日常维护-CheckList_03有关数据库数据文件大小检查
日常数据维护中容量规划是每个DBA的基础工作之一,也是非常重要的工作.在生产环境中一些比较重要的业务数据库会用前期容量规划不足,或出现意外的爆发式的数据增长,直至盛满整个磁盘空间,系统会无法使用,最终 ...
- 数据库日常维护-CheckList_01历史Agent Job执行情况检查
检查Agent Job中日常维护作业或业务作业是否成功,如每天的备份.碎片整理.索引维护.历史备份文件清除等,可利用SSMS工具,通过CDC下面设置好的DB Server List,运行下面脚本一次, ...
- Oracle基础维护02-表、主键、索引、表结构维护手册
目录 一.项目新建表.主键.索引注意事项 二.举例说明建表.主建.索引的操作方法 2.1 设定需求如下 2.1.1 查询数据库有哪些表空间 2.1.2 本文档假设数据库有这两个业务用户的表空间 2.2 ...
- OCP考点实战演练02-日常维护篇
本系列宗旨:真正掌握OCP考试中所考察的技能,坚决不做Paper OCP! 实验环境:RHEL 6.4 + Oracle 11.2.0.4 OCP考点实战演练02-日常维护篇 1.数据库体系结构和AS ...
- Oracle架构设计01:表空间的管理维护规范
Oracle数据库的表空间管理可以说是非常简单和基础的一项维护工作,但是越简单的事情就越要制定统一的规范,这样数据库的各项管理工作才会愈加的简单高效. 那么接下来,问题来了.. Q1:当我们接手一个新 ...
随机推荐
- Windows10 pro & ent 禁用自动更新
为了节约可怜的一点点流量,这个设置还是很重要的. Step 1: 通过在命令提示符中执行gpedit.msc命令,打开组策略 Step 2: 打开管理模板->windows组件->wind ...
- (50)LINUX应用编程和网络编程之五 Linux信号(进程间通信)
信号实现进程间的通信 3.5.1.什么是信号 ...
- Spring Boot教程(一)在springboot中用redis实现消息队列
环境依赖 创建一个新的springboot工程,在其pom文件,加入spring-boot-starter-data-redis依赖: <dependency> <groupId&g ...
- 第五周课程总结&试验报告
this和super的区别 区别点 this super 属性访问 访问同类中的属性,如果本类没有此属性则从父类中继续查找 访问父类中的属性 方法 访问本类中的方法,如果本类中没有此方法,则从父类中继 ...
- LeetCode_001.两数之和
LeetCode_001 LeetCode-001.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输 ...
- GUID和UUID、CLSID、IID 区别及联系
当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全球唯一: 第一种是采用和Internet地址一样的管理方式,成立一个管理机构,用户如果想开发一个COM组件的时候需要向该机构提 ...
- hook C++
Intercepting Calls to COM Interfaces(hook com接口) 通过COM组件IFileOperation越权复制文件 代码注入之远程线程篇 使用VC++通过远程进程 ...
- C 语言中的预处理
C 语言中以 # 开头的就是预处理指令,例如 #include . 预处理指令的用途 所有的预处理指令都会在 GCC 编译过程的预处理步骤解析执行,替换为对应的内容.在下一步编译过程中,看不到任何预处 ...
- 【ABAP系列】SAP ABAP DOI展示EXCEL或WORD
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP DOI展示EX ...
- C#新特性span 和 Tuple
span 可用于高性能字符串分割等 https://www.cnblogs.com/lonelyxmas/p/10171869.html https://www.codemag.com/article ...