0

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

一切都发生在后台,dispatch_async 在串行队列中。

我的问题是当用户快速滚动照片时:应用程序尝试加载缩略图,而它仍在加载以前照片的 fullScreenImage 版本,所以应该返回缩略图的 UIimageviews 的函数......不t 返回,并出现滞后。

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

4

1 回答 1

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 后对其进行任何操作。

于 2011-12-12T03:15:36.837 回答