2

在我的应用程序中,我使用了performSelectorInBackground:从磁盘加载图像。在使用 dispatch_async 进行一些单元测试后,我决定用 dispatch_async 调用替换我的 performSelectorInBackground。

dispatch_queue_t currentBackgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(currentBackgroundQueue, ^{
    [self getImageFromDisk:sPath delegate:(id)delegate];
});

该代码似乎有效,但现在我的图像加载速度比以前慢。当用户滚动图像时,这会导致黑色图像。

我的应用程序包含某种照片卷轴。我不能使用苹果的平铺示例代码,因为它会增加应用程序的大小。我使用这个片段从磁盘加载图像。

4

1 回答 1

5

我之前在其他类似问题上说过,在全局队列上使用异步调度会导致类似同步的行为,尤其是对于最终更新 UI 的代码。YMMV 但是当我尝试它时,它或多或少与同步调用的结果相同。创建和使用您自己的队列,或(创建并使用您自己的队列)与 NSOperations。

我相信这样做的原因是任何发布到全局队列的事件都会消耗队列处理时间,即使代码在技术上是异步的。不要将全局队列用于后台操作。

使用自定义队列并抽取您自己的运行循环。

于 2012-09-24T08:14:43.297 回答