Das Laden des Bildes von CoreData bei cellForRowAtIndexPath verlangsamt das Scrollen

Ich arbeite an einer UITableView, die der nativen Foto-App von iOS sehr ähnlich ist: Sie besteht aus mehreren Zeilen mit 4 Miniaturbildern in jeder Zeile. (d. h., jede UITableViewCell verfügt über 4 UIImageViews.) Alle Miniaturansichten werden aus Core Data geladen.

Ich habe meine Implementierung mehrmals überarbeitet und sehe Leistungsverbesserungen, kann aber immer noch nicht so reibungslos scrollen wie die Foto-App.

Ich brauche Ratschläge, wie ich die Fotos richtig zwischenspeichern kann, um eine optimale Leistung zu erzielen. Das habe ich versucht:

1. Mein erster Versuch (extrem verzögert beim Scrollen)

Bilder werden mit dem Typ Transformable in CoreData gespeichert.In der cellForRow-Funktion wird jedes Bild sofort aus CoreData abgerufen.

2. Zweiter Versuch (schneller, aber beim Scrollen immer noch etwas verzögert)

Bilder werden mit Binärdatentyp mit der Option "Externer Speicher" in CoreData gespeichert.In der cellForRow-Funktion wird jedes Bild zuerst aus Core Data geladen und dann in NSCache im Speicher gespeichert. Wenn cellForRow das nächste Mal ausgelöst wird, verwenden wir das UIImage aus NSCache direkt, sofern verfügbar.

Nach der Verwendung von NSCache zum Zwischenspeichern von aus CoreData geladenen Bildern ist das Scrollen sichtbar schneller. Da jedoch Bilder aus CoreData geladen werden müssen, wenn sie in NSCache noch nicht verfügbar sind, ist das Scrollen von Zeit zu Zeit immer noch ruckelig.

Es muss also einen besseren Weg geben, ich könnte alle Bilder vorab in den Speicher laden, aber da es möglicherweise eine große Anzahl oder Reihen von Bildern gibt, hatte ich nicht vor, die Bilder überhaupt vorab zu laden.

Was kann ich noch tun, um das Bild in cellForRowAtIndexPath schneller zu laden?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage