Загрузка изображения из CoreData в cellForRowAtIndexPath замедляет прокрутку

Я работаю над UITableView, который очень похож на родное приложение Photo для iOS: в нем много строк с 4 миниатюрами изображений в каждой строке. (т.е. каждый UITableViewCell имеет 4 UIImageViews) Все миниатюры, загруженные из Core Data.

Я несколько раз пересматривал свою реализацию и вижу улучшения производительности, но она по-прежнему не может прокручиваться так же гладко, как приложение Photo.

Мне нужно посоветовать, как правильно кэшировать фотографии для лучшей производительности. Вот что я попробовал:

1. Моя первая попытка (крайняя задержка при прокрутке)

Изображения хранятся с типом Transformable в CoreData.В функции cellForRow каждое изображение извлекается из CoreData на лету.

2. Вторая попытка (быстрее, но все еще немного запаздывает при прокрутке)

Изображения хранятся с типом двоичных данных с опцией «внешнее хранилище», отмеченной в CoreData.В функции cellForRow каждое изображение сначала загружается из Core Data, а затем сохраняется в памяти NSCache, поэтому при следующем запуске cellForRow мы будем использовать UIImage из NSCache напрямую, если он доступен.

После использования NSCache для кэширования изображений, загруженных из CoreData, прокрутка становится заметно быстрее, но поскольку изображения по-прежнему необходимо загружать из CoreData, когда она еще не доступна в NSCache, прокрутка по-прежнему будет прерывистой время от времени.

Таким образом, должен быть лучший способ, я мог бы предварительно загрузить все изображения в память, но так как могло быть большое количество или ряды изображений, поэтому я не планировал предварительно загружать изображения вообще.

Что еще я могу сделать, чтобы быстрее загрузить изображение в cellForRowAtIndexPath?

Ответы на вопрос(3)

Ваш ответ на вопрос