使用 NSOperationQueue 异步从 Web 加载多个图像
Posted
技术标签:
【中文标题】使用 NSOperationQueue 异步从 Web 加载多个图像【英文标题】:loading multiple images from web using NSOperationQueue asynchronously 【发布时间】:2012-01-11 07:34:39 【问题描述】:我有一个数组或 urls 指向服务器上的图像。现在我想在滚动视图中显示图像,每行有 4 个图像。我正在考虑使用 NSOperationQueue 和 NSInvocationOperation 来异步下载图像。我使用以下网址作为参考:http://www.switchonthecode.com/tutorials/loading-images-asynchronously-on-iphone-using-nsinvocationoperation
但我不确定如何下载多个图像。我是否必须使用多个 NSInvocationOperation 对象运行 for 循环并将其添加到 NSOperationQueue 对象?
我正在寻找任何指导来完成我的任务。
编辑: 我已经完成了以下操作,但 NSOperationQueue 无法调用 NSInvocationOperation 对象
NSOperationQueue *queue = [NSOperationQueue new];
for(int i = 0;i<rowcount;i++)
for(int j =0; j<4;j++)
UIButton *btnAlbum = [[UIButton alloc] initWithFrame:CGRectMake(x, y, 72, 72)];
[btnAlbum setBackgroundImage:[UIImage imageNamed:@"placeHolder.png"] forState:UIControlStateNormal];
btnAlbum.tag = count+100;
//[btnAlbum addTarget:self action:@selector(viewAlbum:) forControlEvents:UIControlEventTouchUpInside];
[scrlvw addSubview:btnAlbum];
//[btnAlbum release];
x = x + 80;
count++;
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(loadImage)
object:nil];
[queue addOperation:operation];
[operation release];
x = 0;
y = y +80;
谢谢 潘卡伊
【问题讨论】:
@Priya 我最终在这里使用了 ASIHTTPRequest,但现在它已被弃用,您现在可以使用 Alamofire 【参考方案1】:是的——对于您要下载的每个图像,您创建一个 NSInvocationOperation ,当执行它时,将调用下载图像的例程。将 NSInvocationOperation 添加到队列中,该队列负责在自己的线程上执行 NSInvocationOperation。
您只需要一个队列,但每次下载都需要一个新的 NSInvocationOperation。
【讨论】:
【参考方案2】:ASIHTTPRequest来救我,我能轻松完成任务。
【讨论】:
【参考方案3】:为什么不使用块和 Grand Central Dispatch 来加载这些图像?查看this post 看看这是否适合您。
【讨论】:
以上是关于使用 NSOperationQueue 异步从 Web 加载多个图像的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发-91GCD的同步异步串行并行NSOperation和NSOperationQueue一级用dispatch_once实现单例(转载)