Ленивая загрузка фотографий в UIscrollview - PullRequest
0 голосов
/ 11 декабря 2011

Я пишу фотогалерею наподобие «официальной» на iPhone. Он загружает 3 UIImageViews из ALAsset (один в центре, а предыдущий и следующий слева и справа), загружая миниатюру, а затем fullScreenImage, заменяя его миниатюру.

Все происходит в фоновом режиме, с dispatch_async в последовательной очереди.

Моя проблема в том, что пользователь быстро прокручивает фотографии: приложение пытается загрузить миниатюры, пока оно все еще загружает версию предыдущих фотографий fullScreenImage, поэтому функция, которая должна возвращать UIimageviews миниатюры. . не возвращается, и возникает задержка.

Я не могу отменить задачи, которые уже выполняются в dispatch_async, чтобы дать максимальный приоритет функции, которая загружает эскизы, так как я могу решить эту проблему?

1 Ответ

0 голосов
/ 12 декабря 2011

Это один сценарий, для которого предназначались 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);

Теперь любая работа, которую вы отправляете disatch_async () для myImageQueue, будет иметь меньший приоритет, чем любая работа, которую вы отправляете в myThumbnailQueue, поскольку целевая очередь для этой работы была перенаправлена ​​в параллельную очередь с высоким приоритетом. По умолчанию целевой очередью для новой последовательной очереди является глобальная параллельная очередь с «нормальным» приоритетом, поэтому нам не нужно ничего делать с myImageQueue после ее создания.

...