У меня есть UITableView, который отображает изображения, связанные с контактами в каждой строке. В некоторых случаях эти изображения считываются на первом дисплее из контактного изображения адресной книги, и там, где их нет, они являются аватаром, созданным на основе сохраненных данных. В настоящее время эти изображения обновляются в фоновом потоке с использованием GCD. Однако это загружает изображения в том порядке, в котором они были запрошены, что означает, что при быстрой прокрутке очередь становится длинной, и когда пользователь перестает прокручивать текущие ячейки, последние обновляются. На iPhone 4 проблема на самом деле не очень заметна, но я заинтересован в поддержке старого оборудования и тестирования на iPhone 3G. Задержка допустима, но довольно заметна.
Мне кажется, что стек Last In-First Out, похоже, в значительной степени разрешит эту проблему, так как всякий раз, когда пользователь перестанет прокручивать эти ячейки, будет обновлен следующий, а затем остальные, которые в настоящее время находятся вне экрана, будут обновлено. Возможно ли это с Grand Central Dispatch? Или не слишком обременительно реализовать какой-то другой способ?
Обратите внимание, что я использую Core Data с хранилищем SQLite, и я не использую NSFetchedResultsController из-за отношения "многие-ко-многим", которое необходимо пройти, чтобы загрузить данные для этот вид. (Насколько мне известно, это исключает использование NSFetchedResultsController.) [Я обнаружил, что NSFetchedResultsController может использоваться со многими-ко-многим отношениями, несмотря на то, что говорит официальная документация. Но я пока не использую его в этом контексте.]
Дополнение: просто отметим, что в то время как тема "Как создать последний в первом стеке с GCD", на самом деле я просто хочу решить проблему, изложенную выше, и может быть лучший способ сделать это, Я более чем открыт для предложений, таких как timthetoolman, который решает проблему, изложенную по-другому; если такое предложение, наконец, то, что я использую, я узнаю как лучший ответ на исходный вопрос, так и лучшее решение, которое я закончил реализовать...:)