┌──┐┌──┐┌──┐┌──┐┌──┐
││││└┐┌┘│┌┐││ ─┤└┐┌┘
││││ ││ │││││ ─┤ ││
└┴┴┘ └┘ └┘└┘└──┘ └┘
MTNET — это легкая и мощная HTTP-библиотека для iOS, предназначенная для обработки сценариев с большим количеством частых HTTP-запросов. В уже выпущенных приложениях она продемонстрировала высокую производительность и стабильность.
Другие сетевые библиотеки легко осваиваются, но становятся сложными при работе с плотной последовательностью запросов и большими файлами.
Используйте пул загрузки для управления всеми сетевыми загрузками, задайте количество одновременно выполняющихся запросов, прекратите или отмените отдельные запросы, используйте два способа получения данных: в оперативной памяти и на диске.
При получении данных на диск, они записываются небольшими порциями, что позволяет избежать проблем с использованием памяти при загрузке больших файлов.
Разработчики могут наследовать класс MTDownloadRecvDataFileSystem
, чтобы гибко указывать пути хранения и имена файлов, а также использовать методы для проверки наличия кэшированных файлов и получения этих файлов.
~~~ Несколько пользователей обратились с просьбой поддерживать arc-версию; мы планируем сделать это как можно скорее ~~~# Использование
Добавьте заголовочные файлы
```objectivec
#import "MTDownloaderHelper.h"
#import "MTDownloadObjectModel.h"
#import "MTDownloadRequest.h"
#import "MTDownloadRecvData.h"
```
Задайте свойство для пула загрузки
```objectivec
@property (nonatomic, strong) MTDownloaderHelper * downloadHelper;
...
self.downloadHelper = [[MTDownloaderHelper alloc] init];
```
Установите максимальное количество одновременно выполняемых задач
```objectivec
[self.downloadHelper setMaxConcurrentTaskCount:5];
```
Вы можете задать одинаковое время ожидания для всех ссылок в пуле загрузки
```objectivec
[self.downloadHelper setTimeout:20];
```
Добавьте запрос на загрузку в пул загрузки
```objectivec
MTDownloadRequest * request = [[MTDownloadRequest alloc] init];
MTDownloadObjectModel * downloadModel = [[MTDownloadObjectModel alloc] init];
downloadModel.url = @"http://www.baidu.com";
request.downloadModel = downloadModel;
request.delegate = self;
[self.downloadHelper addDownloadRequest:request];
```
Отмените запрос на загрузку, если он ещё не начался, он будет удалён из очереди загрузки. Если загрузка уже началась, она будет прекращена.
```objective-c
[self.downloadHelper cancelDownloadRequestByName:request.name];
```
Используйте `MTDownloadRequestDelegate`, чтобы получить результаты загрузки.
```objective-c
- (void)didTaskReceiveDataFinish:(NSData *)theData request:(MTDownloadRequest *)request {
NSLog(@"Загрузка завершена успешно");
}
- (void)taskDataDownloadFailed:(NSError *)error request:(MTDownloadRequest *)request {
NSLog(@"Загрузка завершилась ошибкой: %@", error);
}
```### Пользовательская конфигурация приема данных загрузки
Вы можете расширять `MTDownloadRecvDataFileSystem`, чтобы создать свои правила приема данных. В этом классе также предоставляются методы `processRecvAllDataFinish` и `processRecvAllDataFailed`, которые можно переопределить для создания пользовательских действий при успешной или неудачной загрузке данных.Например, после неудачной загрузки данные могут требовать очистки кэша, а после успешной загрузки — выполнения операций сжатия/распаковки файлов, изменения размера изображений и т.д.
```objective-c
#import "MTDownloadRecvData.h"
@interface AppImageDownloadRecv : MTDownloadRecvDataFileSystem
- (void)setFileName:(NSString *)fileName;
@end
#import "AppImageDownloadRecv.h"
#import "MTPath.h"
#import "MTFile.h"
#import "NSString+Extension.h"
#import "mcfDef.h"
@implementation AppImageDownloadRecv
- (id)init {
self = [super init];
if (self) {
self.localCacheDirPath = [MTPath Combine:kCache combinePath:@"appdata"];
static BOOL created = NO;
if (!created) {
created = YES;
[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
```
Добавьте в пул загрузки запрос с пользовательской конфигурацией приема данных.```objective-c
MTDownloadRequest *request = [[MTDownloadRequest alloc] init];
MTDownloadObjectModel *downloadModel = [[MTDownloadObjectModel alloc] init];
downloadModel.url = @"http://www.baidu.com";
request.downloadModel = downloadModel;
AppImageDownloadRecv *recvData = [[AppImageDownloadRecv alloc] init];
[recvData setFileName:@"filename"];
request.recvData = recvData;
request.delegate = self;
[self.downloadHelper addDownloadRequest:request];
```Примечание: В данном случае нет необходимости в переводе, так как это программный код, который остаётся без изменений согласно правилам перевода. Однако, если бы были какие-либо строки с описанием или комментариями, они были бы переведены на русский язык.---
Если вам нравится этот проект, оставьте звёздочку;)---
Используете Mtnet в вашем приложении? Дайте знать через [weibo](http://weibo.com/wgblog) или [gang.wang.china@gmail.com](gang.wang.china@gmail.com):).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )