2016-04-15 17 views
0

In meiner Anwendung lade ich einige Bilder mit der URL herunter und lege sie in die cell.imageView[indexPath.row] (es ist eine benutzerdefinierte Zelle mit einem ImageView innerhalb). Ich kann zwei Zellen zu einer Zeit sehen, und ich bemerkte, dass die MethodeCache-Tabelle Zellendaten anzeigen

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> CustomCell { 
} 

Es jedes Mal aufgerufen wird die Zelle angezeigt. Also meine App weiterhin das Bild vom Server herunterladen und die App sehr langsam.

Ich würde gerne wissen, ob es möglich ist, die Daten der Zellen, die ich bereits gesehen habe, zu cachen, also muss ich das Bild nicht erneut herunterladen, wenn ich in meinem TableView nach oben scrolle! Code sprechen Ich möchte die obige func nur aufrufen, wenn ich in der Tabelle nach unten scrolle und nicht nach den Zellen, die ich schon gesehen habe.

Antwort

1

Sie können aber es dauert ein gutes Stück Arbeit, so dass die netten Leute von SDWebImage eine Bibliothek machen zum Download/cache/Abruf-/verwalten Sie Ihre Bild-URLs tauschen einfach Ihr Bild mit dieser Kategorie bekommen Code für UIImageview gibt diese UIImageView.sd_ Methoden .

auch mit Zellen prepareForReuse() implementieren und Aufhebungs holen mit sd_cancel

1

Sie das Rad nicht neu erfinden!
Werfen Sie einen Blick auf NSCache, es funktioniert wie ein veränderbares Wörterbuch, aber es thread sicher.

nscache Objekte unterscheiden sich von anderen wandelbaren Sammlungen in ein paar Möglichkeiten:

Die nscache Klasse umfasst verschiedene Auto-Entfernung Politik, die sicherzustellen, dass es nicht zu viel von der Systemspeicher nicht verwendet. Das System führt diese Richtlinien automatisch aus, wenn von anderen Anwendungen Speicher benötigt wird. Wenn diese Richtlinien aufgerufen werden, werden einige Elemente aus dem Cache entfernt, wodurch der Speicherbedarf minimiert wird.

Sie können Elemente im Cache aus verschiedenen Threads hinzufügen, entfernen und abfragen, ohne den Cache selbst sperren zu müssen. Im Gegensatz zu einem NSMutableDictionary-Objekt kopiert ein Cache nicht die Schlüssel Objekte, die darin eingefügt werden.

Diese Funktionen sind notwendig für die nscache Klasse, wie die Cache entscheiden sich automatisch möglicherweise mutiert asynchron hinter den Kulissen wenn es um Speicher freizugeben aufgerufen wird.

Sie können Ihre Bilder mit ihrer URL und als Wert eingeben.
Documentation.
NSHipster Post.