Bilder vorab für die UIImageView-Kategorie von AFNetworking zwischenspeichern

8

Wenn meine App geladen wird, rufe ich eine JSON-Darstellung von 99 Objekten auf.

Jedes Objekt hat ein Feld 'image_url', das ich an AFNetworkings setImageWithURLRequest weitergebe.

Meine Bilder werden in einer tabellarischen Ansicht geladen, und folglich machen nur die ersten mehreren Zellen Anfragen nach ihren Bildern. Erst wenn ich herunterscrolle, werden nachfolgende Bildanfragen gemacht.

Sobald ich den ersten Datensatz heruntergezogen habe, möchte ich in der Lage sein, einen Hintergrundprozess zu starten, der die etwa 95 Objekte, die anfangs nicht sichtbar sind, herunterlädt und sie so zwischenspeichert, dass sie wann setImageWithURLRequest wird aufgerufen, es wird bereits ein zwischengespeichertes Bild zum Abrufen verwendet.

AFImageCache ist jedoch privat, daher bin ich mir nicht sicher, ob das möglich ist. Ich weiß, dass ich mit NSURLCache cachen konnte, aber dann hätte ich zwei getrennte, isolierte Caches, und das ist auch nicht ideal.

Ist meine einzige Option, die UIImageView-Kategorie von AFNetworking nicht zu verwenden?

Diese Antworten lassen mich denken:

iOS Caching von Bildern mit AFImageCache scheint nicht zu funktionieren
Konfigurieren des Cache bei der Verwendung AFNetworking setImageWithURL

    
djibouti33 28.06.2012, 00:02
quelle

4 Antworten

24

Bitte, bitte tu das nicht.

Vertrau mir, wenn ich sage, dass das fast sicher unnötig ist.

Tatsächlich wird es wahrscheinlich das Gegenteil des gewünschten Effekts haben, aufgrund des erhöhten Drucks beim Herunterladen von Bildern, die wahrscheinlich nie gesehen werden.

Der Cache ist aus einem sehr guten Grund privat - er ist nur dazu da, um nachfolgende Anfragen in Scroll-Ansichten zu beschleunigen. Laden Sie einfach die Bilder wie gewünscht herunter und Sie sollten in Ordnung sein. Wenn überhaupt, können Sie die Größe der heruntergeladenen Bilder optimieren (stellen Sie die korrekten Bildabmessungen sicher, komprimieren Sie sie auf intelligente Weise).

    
mattt 03.07.2012, 19:10
quelle
5

Ich würde nicht eine Reihe von UIImageViews erstellen, um Ihren Zweck zu erreichen, das wäre ein wirklich ineffizienter Ansatz.

Sie können Ihre eigene Methode zu UIImageView+AFNetworking.h hinzufügen, um diese Fähigkeit zu erreichen. Ich denke, das wäre der beste Ansatz. Ein ungetestetes Beispiel wäre:

%Vor%     
Michael Frederick 03.07.2012 17:07
quelle
3

Hier ist eine Lösung - erstellen Sie einige UIImageView -Objekte (aber fügen Sie sie nicht als Unteransichten hinzu) und verwenden Sie dann die UIImageView-Kategorie von AFNetworking, um die Bilder abzurufen und ihren internen Cache zu füllen.

Beispielcode:

%Vor%     
Nick Dowell 02.07.2012 20:36
quelle
1

Sie möchten wahrscheinlich Fully-Loaded

berücksichtigen

Ein einfacher selbstverwalteter Cache besteht darin, die Bilder herunterzuladen und in einem URL-abhängigen Dateinamen zu speichern.

Wenn Sie ein Bild von einer URL laden möchten, versuchen Sie zuerst von der Festplatte zu lesen - wenn nil zurückgegeben wurde, fahren Sie mit Ihrem Bild-Downloader fort.

Vergessen Sie nicht, Ihre Bild-Caches zu löschen.

    
xingzhi.sg 03.07.2012 06:11
quelle