La carga de imágenes de CoreData en cellForRowAtIndexPath ralentiza el desplazamiento

Estoy trabajando en un UITableView que se parece mucho a la aplicación Photo nativa de iOS: tiene muchas filas con 4 miniaturas de imágenes en cada fila. (Es decir, cada UITableViewCell tiene 4 UIImageViews) Todas las miniaturas cargadas desde Core Data.

He revisado mi implementación varias veces y puedo ver mejoras en el rendimiento, pero aún no puedo desplazarme tan fácilmente como la aplicación Photo.

Necesito consejos sobre cómo guardar las fotos en caché correctamente para un mejor rendimiento. Esto es lo que intenté:

1. Mi primer intento (extremadamente demorado cuando se desplaza)

Las imágenes se almacenan con el tipo Transformable en CoreData.En la función cellForRow, cada imagen se recupera de CoreData sobre la marcha.

2. Segundo intento (más rápido, pero aún se retrasa un poco al desplazarse)

Las imágenes se almacenan con el tipo de Datos Binarios con la opción 'almacenamiento externo' marcada en CoreData.En la función cellForRow, cada imagen se carga primero desde Core Data y luego se almacena en NSCache en la memoria, así que la próxima vez que se active cellForRow, usaremos el UIImage de NSCache directamente, si está disponible.

Después de usar NSCache para almacenar en caché las imágenes cargadas desde CoreData, el desplazamiento es visiblemente más rápido, pero como las imágenes aún deben cargarse desde CoreData cuando aún no está disponible en NSCache, el desplazamiento será irregular de vez en cuando.

Por lo tanto, debe haber una mejor manera, podría precargar todas las imágenes en la memoria pero ya que puede haber un gran número o filas de imágenes, así que no planeo precargar las imágenes en absoluto.

¿Qué más puedo hacer para cargar la imagen más rápido en cellForRowAtIndexPath?

Respuestas a la pregunta(3)

Su respuesta a la pregunta