Wie speichere ich etwas für eine Tabellenansicht?

8

Ich habe eine Tabellenansicht mit großen Bildern, die die Zellen füllen, und die Zeilenhöhen werden basierend auf der Bildgröße festgelegt. Leider ruckelt die Tabelle beim Scrollen zur nächsten Zelle schlecht.

Mir wurde gesagt, dass meine Tabellenansicht reibungsloser läuft, wenn ich die Zeilenhöhen und die Bilder zwischenspeichern, bevor sie in die Tabelle geladen werden. Alle meine Daten sind in einem Verzeichnis gespeichert.

Wie gehe ich vor, etwas zwischenzuspeichern? Wie sieht der Code aus und wohin?

Danke!

Hier ist mein Code zum Laden der Bilder:

%Vor%

Ich verwende auch Folgendes zur Berechnung der Zeilenhöhe:

%Vor%

EDIT: Hier ist der letzte Code unten.

%Vor%     
Jonah 03.09.2009, 02:57
quelle

2 Antworten

16

Caching ist kein Allheilmittel für die Tableview-Leistung. Caching ist nur dann sinnvoll, wenn es sich um eine kostspielige Berechnung handelt und Sie es vermeiden können, es zu berechnen. Wenn Sie andererseits in Ihrer UITableViewCell einfach zu viele Ansichten haben, wird Caching nichts für Sie tun. Wenn Ihre Zeilenhöhen alle gleich sind, dann gibt es nichts zu cachen. Wenn Sie +[UIImage imageNamed:] verwenden, speichert das System Ihre Bilder bereits zwischen.

Das häufigste Problem erster Ordnung bei UITableViewCells besteht darin, dass zu viele Unteransichten darin abgelegt werden. Wie hast du deine Zelle gebaut? Haben Sie sich die Zeit genommen, das Table View Programmierhandbuch zu studieren, insbesondere A Closer Look Tabellenansicht-Zellen ? Wenn Sie dieses Dokument verstehen, ersparen Sie sich später viel Kummer.

BEARBEITEN: (Basierend auf dem obigen Code)

Zuerst holen Sie eine wiederverwendbare Zelle und werfen sie sofort weg, lesen eine NIB und durchlaufen alle Objekte der obersten Ebene, die nach einer Zelle suchen (die fast genau so aussieht wie die, die Sie gerade weggeworfen haben). Dann erarbeiten Sie einen String, mit dem Sie eine Datei öffnen und den Inhalt lesen können. Sie tun dies jedes Mal, wenn UITableView eine neue Zelle benötigt, was sehr viel ist. Und Sie tun es immer wieder für die gleichen Zeilen.

Wenn UITableView die Höhe kennen möchte, lesen Sie das Bild erneut von der Festplatte. Und Sie tun das jedes Mal, wenn UITableView fragt (und es kann oft nach der gleichen Zeile fragen, obwohl es versucht, dies zu optimieren).

Sie sollten mit dem UITableView Programming Guide beginnen, den ich oben verlinkt habe. Das wird hoffentlich viel helfen. Wenn Sie das getan haben, sollten Sie Folgendes beachten:

  • Sie haben angegeben, dass in dieser Zelle nur eine einzelne Bildansicht vorhanden ist. Brauchen Sie wirklich eine NIB dafür? Wenn Sie bei einer NIB bleiben (und es gibt Gründe, sie in einigen Fällen zu verwenden), lesen Sie den Programmierleitfaden zur Implementierung einer NIB-Basiszelle. Sie sollten IBOutlet verwenden und nicht versuchen, über die Objekte der obersten Ebene zu iterieren.

  • +[UIImage imageNamed:] findet automatisch Dateien in Ihrem Ressourcenverzeichnis, ohne dass Sie den Pfad des Pakets berechnen müssen. Es speichert diese Bilder automatisch für Sie.

  • Der Punkt von -dequeueReusableCellWithIdentifier: ist das Abrufen einer Zelle, die UITableView nicht mehr verwendet und die Sie neu konfigurieren können, anstatt eine neue Zelle zu erstellen. Du rufst es an, aber du wirfst es sofort weg. Sie sollten überprüfen, ob es nil zurückgegeben hat, und es nur aus der NIB laden, wenn dies der Fall ist. Andernfalls müssen Sie nur das Bild ändern. Lesen Sie erneut die Programmieranleitung. Es hat viele, viele Beispiele dafür. Stellen Sie nur sicher, dass Sie wirklich versuchen zu verstehen, was -dequeueReusableCellWithIdentifier: macht, und behandeln Sie es nicht als etwas, das Sie an dieser Stelle im Programm eingeben.

Rob Napier 03.09.2009, 03:02
quelle
4

Wenn Sie die Höhen zwischenspeichern müssen, habe ich etwas Ähnliches gemacht (Caching-Höhen für eine Zelle, die ein "Artikel" -Objekt anzeigt - Artikel möglicherweise eine von mehreren Unterklassen):

%Vor%     
Paul de Lange 12.06.2012 08:10
quelle

Tags und Links