DownloadDemoDataRequest -----》ITTASIBaseDataRequest---》ITTBaseDataRequest
///文件下载请求,能同时下载多个。。。。
- (IBAction)startDownloadRequest:(id)sender
{
dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t queueGroup = dispatch_group_create();
dispatch_group_async(queueGroup, aQueue, ^{
NSString *filePath = ITTPathForCacheResource(@"download_test.zip");
[DownloadDemoDataRequestrequestWithParameters:nil
withIndicatorView:nil
withCancelSubject:@"DownloadDemoDataRequestCancel"
withFilePath:filePath
onRequestFinished:^(ITTBaseDataRequest *request) {
ITTDINFO(@"DownloadDemoDataRequest finished");
_progressLabel.text = @"done";
}
onProgressChanged:^(ITTBaseDataRequest *request, float progress) {
ITTDINFO(@"DownloadDemoDataRequest progress changed:%2.2f",progress);
_progressLabel.text = [NSString stringWithFormat:@"%2.2f%@",progress*100,@"%"];
}
];
[DownloadDemoDataRequestrequestWithParameters:nil
withIndicatorView:nil
withCancelSubject:@"DownloadDemoDataRequestCancel"
withFilePath:filePath
onRequestFinished:^(ITTBaseDataRequest *request) {
ITTDINFO(@"DownloadDemoDataRequest finished");
self.firstLabel.text = @"done";
}
onProgressChanged:^(ITTBaseDataRequest *request, float progress) {
ITTDINFO(@"DownloadDemoDataRequest progress changed:%2.2f",progress);
self.firstLabel.text = [NSString stringWithFormat:@"%2.2f%@",progress*100,@"%"];
}
];
[DownloadDemoDataRequestrequestWithParameters:nil
withIndicatorView:nil
withCancelSubject:@"DownloadDemoDataRequestCancel"
withFilePath:filePath
onRequestFinished:^(ITTBaseDataRequest *request) {
ITTDINFO(@"DownloadDemoDataRequest finished");
self.secondLabel.text = @"done";
}
onProgressChanged:^(ITTBaseDataRequest *request, float progress) {
ITTDINFO(@"DownloadDemoDataRequest progress changed:%2.2f",progress);
self.secondLabel.text = [NSString stringWithFormat:@"%2.2f%@",progress*100,@"%"];
}
];
});
//任务5
// dispatch_group_async(queueGroup, aQueue, ^{
//
//
//
// });
DownloadDemoDataRequest.m 里面。。。。。
#import "DownloadDemoDataRequest.h"
#import "ITTGobalPaths.h"
#import "ZipFile.h"
#import "ZipException.h"
#import "FileInZipInfo.h"
#import "ZipWriteStream.h"
#import "ZipReadStream.h"
#import "CommonUtils.h"
#import "NSDate+ITTAdditions.h"
@implementation DownloadDemoDataRequest
- (NSString*)getRequestUrl
{
NSString *dateStr = [[NSDate date] stringWithFormat:@"yyyy-MM-dd"];
return [NSStringstringWithFormat:@"http://cn.wsj.com/ipad/plist/%@.zip",dateStr];
}
- (BOOL)processDownloadFile
{
@autoreleasepool {
BOOL success = YES;
@try {
ZipFile *unzipFile= [[ZipFilealloc] initWithFileName:_filePathmode:ZipFileModeUnzip];
NSArray *infos= [unzipFile listFileInZipInfos];
[unzipFile goToFirstFileInZip];
int index = 0;
do{
ZipReadStream *read= [unzipFile readCurrentFileInZip];
FileInZipInfo *info = infos[index];
NSString *path = ITTPathForCacheResource(@"download_unziped");;
if (info.size == 0) {
//is folder
[CommonUtils createDirectorysAtPath:path];
}else{
NSString *directorPath = [CommonUtils getDirectoryPathByFilePath:path];
[CommonUtils createDirectorysAtPath:directorPath];
NSMutableData *fileData= [NSMutableData data];
BOOL isEndofFile = NO;
while (!isEndofFile) {
NSMutableData *data= [[NSMutableData alloc] initWithLength:256];
int bytesRead= [read readDataWithBuffer:data];
if (bytesRead <= 0) {
isEndofFile = YES;
}else{
[fileData appendData:data];
}
}
[fileData writeToFile:path atomically:YES];
//ITTDINFO(@"write to file [%d]:%@", success,path);
}
[read finishedReading];
index ++;
}while ([unzipFile goToNextFileInZip]);
[unzipFile close];
ITTDINFO(@"zip file unzipped...............");
} @catch (ZipException *ze) {
ITTDERROR(@"ZipException caught: %d - %@", ze.error, [ze reason]);
success = NO;
} @catch (id e) {
ITTDERROR(@"Exception caught: %@ - %@", [[e class] description], [e description]);
success = NO;
}
return success;
}
}
@end
相关推荐
使用技术: 基于iOS最新的网络请NSURLSession 封装下载框架 目前功能: (1)多线程下载,可自定义并发数 (2)支持断点续传 (3)支持取消下载任务 (4)支持暂停下载后app重新启动可继续下载 (5)支持状态栏网络...
总之,iOS异步队列下载利用ASIHTTPRequest库实现了高效、可控的多任务下载,不仅提高了下载效率,还确保了良好的用户交互体验。理解和掌握这些知识点对于iOS开发者来说至关重要,特别是对于那些需要处理大量网络请求...
总结,iOS应用在进行文件下载时,使用多线程异步下载可以提升用户体验,结合断点续传技术,即使在网络不稳定的情况下也能保证下载的连续性。同时,通过显示进度条和字节数,可以让用户清晰地了解下载状态。最后,...
本项目名为“iOS异步图片加载库”,显然是一个针对iOS平台的开源项目,用于帮助开发者实现高效、流畅的图片加载功能。 这个库的核心概念是利用GCD(Grand Central Dispatch)或者NSOperationQueue来处理后台任务,...
标题中的"iOS异步加载图片"暗示我们讨论的是如何在iOS应用中避免UI阻塞,通过后台线程加载图片资源,使得界面始终保持流畅。在描述中提到的“上次忘记初始化,犯一低级错误”,这可能是指在使用图片加载库或者自定义...
IconDownloader是一个用于异步下载和缓存图片的工具,它可以避免UI卡顿,同时确保图片资源的高效利用。 使用IconDownloader,你需要先创建一个下载任务,指定图片URL,然后在回调中处理下载完成的图片。这个过程...
以下是对"ios异步加载图片"这一主题的详细阐述: 1. **异步加载原理**: 异步加载是将耗时任务放在后台线程执行,不影响主线程对UI的更新。在iOS中,通常使用GCD(Grand Central Dispatch)或者NSOperationQueue来...
在iOS开发中,文件下载是一项常见的任务,尤其对于那些需要从服务器获取大量数据或资源的应用来说,例如游戏、媒体应用或者任何需要更新内容的应用。本文将深入探讨如何在iOS中封装文件下载,以提高代码的可维护性和...
在iOS开发中,文件下载是常见的操作,尤其在App需要获取网络资源时。本文将详细介绍如何在iOS中实现文件下载,以"FFDownloadManager"为例,这是一个可能的自定义下载管理器,它可以帮助我们高效、稳定地处理文件下载...
在iOS开发中,为了提升用户体验,我们经常需要在后台异步下载图片并实时更新下载进度。ASIHTTPRequest是一个经典的网络请求库,它提供了丰富的功能来帮助开发者处理这些需求。本篇文章将详细讲解如何利用...
综上所述,AFNetworking是iOS开发中的必备工具,它简化了HTTP请求、文件下载和上传的操作,且具有高度可定制性。通过研究提供的CocoaPodsDemo,你可以更深入地理解AFNetworking的工作原理及其在实际项目中的应用。
在iOS应用开发中,异步下载是一项常见的任务,特别是在Xcode...通过URLSession和适当的代理方法,我们可以实现高效、可靠的文件下载功能。在实际项目中,记得根据具体需求进行定制和优化,以确保最佳的性能和用户体验。
文件下载时,同样需要接收数据并写入文件。可以创建一个临时文件,每次接收到数据后追加到该文件。为了进度显示,可以在`socket:didReadData:withTag:`代理方法中更新下载进度。 6. **多线程支持**: ...
总的来说,"IOS通过URL下载保存图片"这个话题涵盖了网络请求(URLSession)、文件操作(FileManager)、用户界面更新(UIImage,UIImageView)等核心iOS开发技能。理解并熟练掌握这些知识点,对于开发高质量的iOS...
在iOS开发中,解析XML文件是一项常见的任务,特别是在与服务器进行数据交互时。XML(Extensible Markup Language)是一种用于标记数据的语言,具有良好的结构性和可读性,使得它成为网络数据传输的常用格式。本篇...
写在前面 在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求。尽管有很多现存的第三方...•下载管理类负责开启下载线程和各种缓存(内存+文件),下载完成后
在iOS开发中,文件下载是一项常见的任务,尤其是在网络通信丰富的应用程序中。`NSURLSession`是苹果提供的一个强大且灵活的框架,用于处理HTTP和其他基于TCP的网络协议。在本教程中,我们将深入探讨如何使用`...
当文件下载完成后,会自动保存到指定路径,并通过 delegate 方法通知应用。 6. **进度显示**:在下载过程中,为了提升用户体验,通常会展示下载进度。URLSession的downloadTask提供了监控下载进度的方法,开发者...
在iOS开发中,读取文件或文件夹的大小是常见的需求,这可以帮助我们了解应用程序的存储占用、管理用户数据或者优化资源加载。本篇将详细讲解三种不同的方法,以实现这一功能。 一、使用FileManager iOS系统提供的`...