performSelectorInBackground

performSelectorInBackground

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

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

该代码似乎可以正常工作,但是现在我的图像加载速度比以前慢。当用户滚动图像时,这会导致图像变黑。

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

最佳答案

Ive之前在其他类似问题上说过这一点,在全局队列上使用dispatch async将导致类似同步的行为,特别是对于最终更新UI的代码而言。 YMMV,但是当我尝试过时,它的结果与同步调用大致相同。使用NSOperations创建和使用您自己的队列,或(创建和使用您自己的队列)。

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

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

10-07 20:51