在UIscrollview上延迟加载照片

时间:2011-12-11 02:03:35

标签: objective-c grand-central-dispatch alassetslibrary

我正在写一个像iPhone上的“官方”照片库。它从ALAsset加载3个UIImageViews(中间的那个,前后左右两个),加载缩略图然后是fullScreenImage,替换它的缩略图。

一切都发生在后台,在队列队列中使用dispatch_async。

我的问题是当用户快速滚动照片时:应用程序尝试加载缩略图,同时仍然加载上一张照片的fullScreenImage版本,因此该函数应该返回缩略图的UIimageviews。 。不返回,发生滞后。

我无法取消已经在dispatch_async上运行的任务,以便为加载缩略图的函数赋予最大优先级,那么我如何才能解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

这是一个场景,内置并发队列的4个(最初为3个)不同的优先级用于解决。具体来说,请说:

dispatch_queue_t high, myImageQueue, myThumbnailQueue;

high = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0L);
myImageQueue = dispatch_queue_create("task.imageQ", NULL);
myThumbnailQueue = dispatch_queue_create("task.thumbQ", NULL);
dispatch_set_target_queue(myThumbnailQueue, high);

现在,您将dispatch_async()发送到myImageQueue的任何工作的优先级都低于您提交给myThumbnailQueue的任何工作,因为该工作的目标队列已在高优先级并发队列中重新定位。默认情况下,新串行队列的目标队列是“普通”优先级全局并发队列,因此创建后我们不必对myImageQueue执行任何操作。