MTNET 自用ios網路程式庫開源

來源:互聯網
上載者:User

標籤:

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網路程式庫開源

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.