使用块从后台线程加载图像

我有下面的方法,基本上调用一个请求加载在后台线程的图像NSData数组:

[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){ }]; 

在这种情况下,对象是NSData的一个数组。 问题是,如果我有100个图像加载(数组中的100个元素)。 这意味着用户将不得不等待一段时间才能看到在UITableView中显示的图像。 我想要做的是让他们看到一个图像,一旦它是可用/加载..我必须然后更改代码,以便它有100个后台线程加载图像?

你可以在你的cellForRowAtIndexPath中实现这样的东西:

这样你就可以在后台加载每个图片,并且一旦加载了相应的单元就会在mainThread上更新。

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) { NSData *data0 = [NSData dataWithContentsOfURL:someURL]; UIImage *image = [UIImage imageWithData:data0]; dispatch_sync(dispatch_get_main_queue(), ^(void) { UIImageView* imageView = (UIImageView*)[cell viewWithTag:100]; imageView.image = image; }); }); 

不,你不必创build这么多的后台线程。 使用NSOperationQueue

您可以创buildNSInvocationOperation并将其设置为NSOperationQueue

例如:初始化NSOperationQueue

 NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init]; 

创buildNSInvocationOperation

 NSInvocationOperation* downloadOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(selectorToDownloadImage:) object:YouData]; [operationQueue addOperation:downloadOperation]; [downloadOperation release];