Стек «Последний пришел - первым ушел» с GCD?

У меня есть UITableView, который отображает изображения, связанные с контактами в каждой строке. В некоторых случаях эти изображения считываются при первом отображении из изображения контакта адресной книги, а если его нет, они представляют собой аватар, отображаемый на основе сохраненных данных. В настоящее время я обновляю эти изображения в фоновом потоке с помощью GCD. Однако при этом изображения загружаются в том порядке, в котором они были запрошены, что означает, что во время быстрой прокрутки очередь становится длинной, и когда пользователь прекращает прокрутку, текущие ячейки являются последними , которые обновляются. На iPhone 4 проблема не особо заметна, но я очень хочу поддерживать старое оборудование и тестирую на iPhone 3G. Задержка терпимая, но довольно заметная.

Мне кажется, что стек Last In - First Out, вероятно, в значительной степени решит эту проблему, поскольку всякий раз, когда пользователь прекращает прокрутку, эти ячейки будут обновлены следующими, а затем другие, которые в настоящее время находятся за пределами экрана, будут обновлено. Возможно ли такое с Grand Central Dispatch? Или не слишком обременительно реализовать какой-то другой способ?

Обратите внимание, кстати, что я использую Core Data с хранилищем SQLite и не использую NSFetchedResultsController из-за связи «многие ко многим», которая имеет пройти, чтобы загрузить данные для этого представления.(Насколько мне известно, это исключает использование NSFetchedResultsController.) [Я обнаружил, что NSFetchedResultsController может использоваться с отношениями «многие ко многим», несмотря на то, что, кажется, говорится в официальной документации. Но я пока не использую его в данном контексте.]

Дополнение: Просто хочу отметить, что хотя тема - «Как создать стек по последнему, первым ушел с GCD», на самом деле я просто хотите решить описанную выше проблему, и может быть лучший способ сделать это. Я более чем открыт для предложений, подобных предложению Timthetoolman, которое решает проблему, обозначенную другим способом; если такое предложение, наконец, является тем, что я использую, я узнаю как лучший ответ на исходный вопрос, так и лучшее решение, которое я в итоге реализовал ... :)

28
задан Duncan Babbage 25 October 2011 в 08:17
поделиться