我试图从API下载数据,然后将其显示给用户。GCD - 具有同步任务的异步队列
下面是我在做什么:
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{
__block NSMutableArray *newImages;
dispatch_sync(concurrentQueue, ^{
newImages = [NSMutableArray array];
// images retrieved using `NSURLConnection sendSynchronousRequest`
});
dispatch_sync(dispatch_get_main_queue(), ^{
// display images to the user
});
});
我的问题是,既然newImages
与__block
声明,我总是保证在主队列执行第二任务时拥有最新的数据newImages
?如果不是,将数组内容传递到第二个块并确保其最新内容的最安全方法是什么?
我认为我的数据在某个地方变得混乱,因此我在问这个问题。
如果这看起来很好,那么我会发布我的完整代码,以帮助整个事情,以防万一其他错误。
问题是我有多个图像,我想一次下载它们,然后对其执行UI更新。我正在for循环中抓取图像。您提供的代码将通过图像来完成该图像。整个批次不会更新更好吗?我实际上是通过'performBatchUpdates:completion'来更新UI的'UICollectionView',就像你在我以前的问题中看到的那样。你会建议什么?我应该用其他东西来替换'performBatchUpdates'吗?如果是这样,那么我将使用什么来在集合视图之后执行另一个更新? – darksky
如果不知道下载的详细信息,我很难分辨出来,但没有理由我发布的代码不能用于批量下载。从服务器下载包含图像数组(或可以转换为数组的一些对象)?如果是这样,那么你仍然可以使用performBatchUpdates:completion:来做UI更新。 – rdelmar