zoukankan      html  css  js  c++  java
  • 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];

  • 相关阅读:
    CSS字体和文本
    【操作系统学习】操作系统概念(一)
    宜家通信 会员管理 表结构搭建
    【优化框架】优化断言,断言返回结果是否包含特定字符串
    【Faker库】faker库(随机生成数据)使用总结转载
    Python+selenium 【第七章】Unittest学习
    Python+selenium 【第六章】UI自动化框架操作测试对象
    Python+selenium 【第五章】UI自动化元素等待
    【Jenkins】python项目集成jenkins并配置allure报告 mac/windows方法一致
    Python+selenium 【第八章】开源项目实战
  • 原文地址:https://www.cnblogs.com/GnagWang/p/4885952.html
Copyright © 2011-2022 走看看