我有以下方法,它基本上调用请求以在后台线程中加载图像的 NSData 数组:
[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){
}];
在这种情况下,对象是 NSData 的数组。问题是,如果我要加载 100 张图像(数组中有 100 个元素)。这意味着用户将不得不等待相当长的时间才能看到 UITableView 中显示的任何图像。我想要做的是让他们在图像可用/加载后看到图像。我是否必须更改代码以便它执行 100 个后台线程来加载图像?
最佳答案
你可以在你的 cellForRowAtIndexPath 中实现这样的东西:
通过这种方式,您可以在后台加载每张图片,一旦加载,相应的单元格就会在主线程上更新。
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;
});
});
关于iphone - 使用 block 从后台线程加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502073/