短短两天就在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网络库开源的更多相关文章

  1. iOS、mac开源项目及库汇总

    原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499    iOS每日一记------------之 中级完美大整理 iOS.m ...

  2. iOS、mac开源项目及库(感谢原作者的分享)

    目录 模糊效果 富文本 表相关 HUD与Toast 其他UI 其他动画 网络测试 网络聊天 Model 数据库 PDF 摄像照相视频音频处理 消息相关 消息推送服务器端 版本新API的Demo 测试及 ...

  3. 最全面的iOS和Mac开源项目和第三方库汇总

    标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...

  4. iOS常用网络库收集

    一 ASIHttpRequest二 AFNetworking 三 AFDownloadRequestOperationA progressive download operation for AFNe ...

  5. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

    下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...

  6. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

  7. iOS开发--iOS及Mac开源项目和学习资料

    文/零距离仰望星空(简书作者)原文链接:http://www.jianshu.com/p/f6cdbc8192ba著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 原文出处:codecl ...

  8. github上关于iOS的各种开源项目集合(转)

    UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITable ...

  9. iOS 第三方库、插件、知名博客总结

    iOS 第三方库.插件.知名博客总结 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图 ...

随机推荐

  1. [ACM_模拟] ZOJ 3713 [In 7-bit 特殊输出规则 7bits 16进制]

    Very often, especially in programming contests, we treat a sequence of non-whitespace characters as ...

  2. JavaScript实用技巧总结

    前言 总结一下最近接触到的JavaScript语法糖,与大家共享. 每块糖都有详细的说明和示例,就不多说了. 准确的类型检查 /* * @function: * 类型检查示例 * 通过此方法,可以检查 ...

  3. SQL范式小结

    说明:大多数初学者对于关系数据库中的范式很是头疼,我本人也是,所以今天又看了视频,总结了一下内容,尽量语言通俗易懂,少用专业术语以及概念. 首先要理解几个键值. 超键:在关系模式中,能唯一标识元组的属 ...

  4. 注册asp.net

    %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

  5. 老生常谈JavaScript闭包

    闭包就是指一个有权访问另外一个函数作用域中的变量的函数.--<JavaScript高级程序第三版> 本人对于闭包初次的认识就来自<高三>,首先仅仅通过“有权”’两个字我们便可以 ...

  6. netstat常见参数

    -a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字.-l 仅列出有在 Lis ...

  7. paip.获取文件名从路径uapi java python php总结...

    paip.获取文件名从路径uapi java python php总结... =====uapi basename_noext($fname); =============java  自己写.. St ...

  8. javaweb学习总结(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  9. SQL Server 内存中OLTP内部机制概述(二)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  10. 关于C++单件模式释放对象

    http://blog.csdn.net/windboyzsj/article/details/2790485 最近接触的一个项目要用到单件模式,我像往常一样哒哒(敲击键盘ing)一个单件模式的典型结 ...