MTNET 自用ios网络库开源
短短两天就在https://git.oschina.net/gangwang/MTNET这里收获15个星 github 5星, 值得收藏!
MTNET 自用ios网络库开源, 自用很久了,在数歀上架的app中运行稳定可靠~ 特意开源出来, 有兴趣的同学可以看一下 https://github.com/GangWang/MTNET
MTNET
MTNET是一个十分轻量、功能强大的ios的http网络库,用来处理有大量很频繁发起http请求的场景,在已上架的数歀app使用中表现良好稳定。
其它的网络库上手容易,但要处理比较密集和较大文件下载时就显得比较麻烦。
使用下载池管理所有网络下载,可设置同时下载的请求数,针对单个请求可以中止和取消,提供两种数据接收方式:内存接收和磁盘接收。
磁盘接收数据会将接收到的数据小块小块的写入磁盘,避免了如果下载文件比较大时造成的内存吃紧
开发者可继承MTDownloadRecvDataFileSystem类,灵活指定下载文件的存储路径和存储文件名,并提供文件是否缓存和获取缓存文件的方法
MTNET是MRC版本
使用
引入头文件
#import "MTDownloaderHelper.h"
#import "MTDownloadObjectModel.h"
#import "MTDownloadRequest.h"
#import "MTDownloadRecvData.h"
声明下载池
@property (nonatomic, strong) MTDownloaderHelper * downloadHelper;
...
self.downloadHelper = [[MTDownloaderHelper alloc] init];
设置下载池同时最多可执行的任务数
[self.downloadHelper setMaxConcurrentTaskCount:5];
可给下载池中所有链接指定同一个下载超时的设置
[self.downloadHelper setTimeout:20];
向下载池中投入一个下载请求
MTDownloadRequest * request = [[MTDownloadRequest alloc] init];
MTDownloadObjectModel * downloadMdel = [[MTDownloadObjectModel alloc] init];
downloadMdel.url = @"http://www.baidu.com";
request.downloadModel = downloadMdel;
request.delegate = self;
[self.downloadHelper addDownloadRequest:request];
取消一个下载请求,如此下载请求还未开始下载就从下载队列中移除。如已开始下开就中止当前下载
[self.downloadHelper cancelDownloadRequestByName:request.name];
使用MTDownloadRequestDelegate 获取下载结果
- (void) didTaskReceiveDataFinish : (NSData *) theData request:(MTDownloadRequest*) request
{
NSLog(@"download ok");
}
- (void) taskDataDownloadFailed : (NSError *) error request:(MTDownloadRequest*) request
{
NSLog(@"download failed:%@", error);
}
自定义接收下载规则
可以继承MTDownloadRecvDataFileSystem自己制定下载规则,在此类中还提供了processRecvAllDataFinish 和 processRecvAllDataFalied这两个方法,重写就可以自定义处理当下载数据出错或者成功后的操作
比如 下载数据出错后需要清理缓存,下载成功后需要对文件进行解压、压缩、图片缩放等
#import "MTDownloadRecvData.h"
@interface AppImageDowloadRecv : MTDownloadRecvDataFileSystem
- (void) setFileName:(NSString *) fileName;
@end
#import "AppImageDowloadRecv.h"
#import "MTPath.h"
#import "MTFile.h"
#import "NSString+Extension.h"
#import "mcfDef.h"
@implementation AppImageDowloadRecv
- (id) init
{
self = [super init];
if(self)
{
self.localCacheDirPath = [MTPath Combine:kCache combinePath:@"appdata"];
static BOOL created = FALSE;
if (!created) {
created = TRUE;
[MTPath createDirectory:self.localCacheDirPath withAttributes:nil];
}
}
return self;
}
- (void) setFileName:(NSString *) fileName
{
if ([NSString isNilOrEmpty:fileName])
{
return;
}
self.name = fileName;
self.localFullPath = [MTPath Combine:self.localCacheDirPath combinePath:fileName];
}
- (BOOL) bCached
{
return [MTFile fileExistsAtPath:self.localFullPath];
}
- (NSData *) data
{
if ([self bCached])
{
return [NSData dataWithContentsOfFile:self.localFullPath];
}
return nil;
}
@end
向下载池中投入一个自己定义下载规则的请求
MTDownloadRequest * request = [[MTDownloadRequest alloc] init];
MTDownloadObjectModel * downloadMdel = [[MTDownloadObjectModel alloc] init];
downloadMdel.url = @"http://www.baidu.com";
request.downloadModel = downloadMdel;
AppImageDowloadRecv * recvData = [[AppImageDowloadRecv alloc] init];
[recvData setFileName:@"filename"];
request.recvData = recvData;
request.delegate = self;
[self.downloadHelper addDownloadRequest:request];
MTNET 自用ios网络库开源的更多相关文章
- iOS、mac开源项目及库汇总
原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499 iOS每日一记------------之 中级完美大整理 iOS.m ...
- iOS、mac开源项目及库(感谢原作者的分享)
目录 模糊效果 富文本 表相关 HUD与Toast 其他UI 其他动画 网络测试 网络聊天 Model 数据库 PDF 摄像照相视频音频处理 消息相关 消息推送服务器端 版本新API的Demo 测试及 ...
- 最全面的iOS和Mac开源项目和第三方库汇总
标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...
- iOS常用网络库收集
一 ASIHttpRequest二 AFNetworking 三 AFDownloadRequestOperationA progressive download operation for AFNe ...
- Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...
- iOS及Mac开源项目和学习资料【超级全面】
UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...
- iOS开发--iOS及Mac开源项目和学习资料
文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...
- github上关于iOS的各种开源项目集合(转)
UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITable ...
- iOS 第三方库、插件、知名博客总结
iOS 第三方库.插件.知名博客总结 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图 ...
随机推荐
- DOS与Linux的换行字符
一.vim打开window下的文件出现 ^M 首先理解,dos(windows)下建立的文件的换行是 ^M\$ (CRLF) ,而在Linux下面,仅仅是以 \$ (LF) 来做断行符号: (^M\ ...
- C/C++文件操作1
在C语言中,文件操作都是由库函数来完成的. 在本章内将介绍主要的文件操作函数. 文件打开函数fopen fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式 ...
- ios 项目里常用的宏
NSLog(@"__func__ : %s", __func__);//oc测试环境,打印文件名,方法名 NSLog(@"__FUNCTION__ : %s" ...
- 深入理解 CSS 的 :before 和 :after 选择器(制作select下拉列表美化插件)
原文链接:http://www.cnblogs.com/LY-leo/p/5765598.html 对于 :before 和 :after 选择器,大家并不陌生,但是很少有人会主动去用它们.先解释下它 ...
- WebLogic 12c SpringMVC Jackson 冲突 java.lang.NoSuchMethodError: TypeFactory.constructParametrizedType(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)
<?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls= ...
- Cacti学习笔记一:基本安装和配置
1.安装依赖包 yum -y install net-snmp-devel mysql mysql-devel openssl-devel libtool 2.安装RRDTool yum -y ins ...
- 解决 "Windows 无法启动Mongo DB服务 错误:1067 进程意外终止"
在启动MongoDB服务时,有时会报上图所示的错误,解决方案为: 1. MongoDB安装目录\data\将此文件夹下的mongod.lock删除 2. 查看官方文档或按照上一篇安装文章检查是否设置d ...
- jQuery实现左移右移
<html> <head> <meta charset="utf-8"> <title>完成左移右移</title> & ...
- JAVA学习中Swing部分JDialog对话框窗体的简单学习
package com.swing; import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent ...
- SqlServer 查看事务锁及执行语句
一.查看当前锁定的事务 ,) ,用户机器名称,) ,是否被锁住),blocked) ,数据库名称,),cmd 命令,waittype as 等待类型 ,last_batch 最后批处理时间,open_ ...