iOS GCD结合AFNetworking异步下载

- (void)downloadImages {

NSString *fileDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;

//                         stringByAppendingPathComponent:@"image"];

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

_imgGroup = dispatch_group_create();

NSLog(@"start downloading");

dispatch_group_async(_imgGroup, globalQueue, ^{

dispatch_group_enter(_imgGroup);

NSString *filePath = [fileDir stringByAppendingPathComponent:@"image0.jpg"];

[self downloadImageToPath:filePath url:self.imgURLs[0]];

});

dispatch_group_async(_imgGroup, globalQueue, ^{

dispatch_group_enter(_imgGroup);

NSString *filePath = [fileDir stringByAppendingPathComponent:@"image1.jpg"];

[self downloadImageToPath:filePath url:self.imgURLs[1]];

});

dispatch_group_async(_imgGroup, globalQueue, ^{

dispatch_group_enter(_imgGroup);

NSString *filePath = [fileDir stringByAppendingPathComponent:@"image2.jpg"];

[self downloadImageToPath:filePath url:self.imgURLs[2]];

});

dispatch_group_notify(_imgGroup, globalQueue, ^{

NSLog(@"finish download");

});

}

- (void)downloadImageToPath:(NSString *)filePath url:(NSString *)url{

AFURLSessionManager *sessionMgr = [[AFURLSessionManager alloc] initWithSessionConfiguration:self.sessionConfig];

NSURL *imgURL = [NSURL URLWithString:url];

NSURLRequest *request = [NSURLRequest requestWithURL:imgURL];

NSURLSessionDownloadTask *downloadTask =

[sessionMgr downloadTaskWithRequest:request

progress:nil

destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {

NSURL *documentURL = [NSURL fileURLWithPath:filePath];

return documentURL;

} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {

dispatch_group_leave(_imgGroup);

}];

[downloadTask resume];

}

时间: 2024-10-06 01:10:59

iOS GCD结合AFNetworking异步下载的相关文章

iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group

同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一个操作,在串行队列中,可以把最后需要执行的block放在队列最后即可,但是在并行队列中,可以用dispatch_group,最后通过dispatch_group_notify来执行最后要执行的block. 待编辑,补充例子.

GCD异步下载网页功能

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. GCD异步下载网页功能

iOS异步下载下载进度条显示

说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLRequest  委托是 NSURLConnectionDownloadDelegate NSURLConnectionDataDelegate NSURLConnectionDelegate 首先,我们要实现最基本的下载功能. LQAsynDownload.h // // LQAsynDownload.h // lgTest // // Created b

swift详解之十四 -----------NSThread 异步下载图片

NSThread 异步下载图片 在IOS中处理多线程有三个方案 , NSThread .NSOperation .GCD .当然GCD应该是最方便的 ,我们一个一个学 .先理解底层的,最后再使用最方便的 . NSThread: 优点:NSThread 比其他两个轻量级 缺点:需要自己管理线程的生命周期,线程同步.线程同步对数据的加锁会有一定的系统开销 我们先研究下用NSThread 异步加载网络图片 : NSThread有两种创建方式 ,一种是通过实例方法.一种是通过类方法. let threa

iOS开发之AFNetworking开源库的使用

iOS开发之AFNetworking开源库的使用 1.简介 常见的处理网络请求方式 (1)NSURLConnection/NSURLSession (2)ASIHttpRequest 早期项目中比较常见, 由于作者不更新了 (3)AFNetworking 推荐使用, 项目中使用 (4)MKNetworkKit 试试 2.配置和使用 2.1 配置 库文件拖入工程中, 包含头文件 #import "AFNetworking.h" 2.2 使用 //演示AFNetworking的使用 //1

IOS 开发之网络数据下载和JSON解析

简介 在本文中,我将给大家介绍ios中如何运用NSURLConnection从网络上下载数据,以及解析JSON数据格式的数据,还有数据的显示和图片异步下载. 涉及到的知识点: 1.NSURLConnection的异步下载和数据请求方法的封装. 2.认识JSON格式和JSON格式的解析使用 3.数据在模拟器上的显示和图片的异步下载(使用SDWebImage异步显示图片,SDWebImage是一个库) 注意: 在ios开发中,无论是数据还是图片都是使用异步下载方法,不能使用同步. 内容 首先,要完成

iOS GCD中级篇 - dispatch_group的理解及使用

前文我们讲了GCD基础篇,以及同步.异步,并发.并行几个概率的理解. 参考链接: iOS GCD基础篇 - 同步.异步,并发.并行的理解 现在讲一下dispatch_group的概念以及几种场景下的使用 1.关于dispatch_group 把一组任务提交到队列中,这些队列可以不相关,然后监听这组任务完成的事件. 最常见的几个方法: 1.dispatch_group_create创建一个调度任务组 2.dispatch_group_async 把一个任务异步提交到任务组里 3.dispatch_

UI_18 图片异步下载、KVO

一.异步下载图片ImageViewDownloader 图?下载是iOS开发中常?的功能,但系统并未提供图?下载类. 为了便于后续使?,可以将图?下载封装到?个类?? (ImageDownloader) 新建SingleViewApplication,使用默认的Storyboard,向其中添加一个Button一个ImageView并关联属性.添加事件.点击Button实现异步下载并显示图片.AsynImageDownloader类封装了下载图片的方法. 使用代理进行AsynImageDownlo

iOS开发>学无止境 - Cell异步图片加载优化,缓存机制详解

作者:勤奋的笨老头 网址:http://www.jianshu.com/p/02ab2b74c451 最近研究了一下UITbleView中异步加载网络图片的问题,iOS应用经常会看到这种界面.一个tableView上显示一些标题.详情等内容,在加上一张图片.这里说一下这种思路. 为了防止图片多次下载,我们需要对图片做缓存,缓存分为内存缓存于沙盒缓存,我们当然两种都要实现. 由于tableViewCell是有重用机制的,也就是说,内存中只有当前可见的cell数目的实例,滑动的时候,新显示cell会