短短兩天就在https://git.oschina.net/gangwang/MTNET這裏收穫15個星 github 5星, 值得收藏!ios
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];git