Frage

Ich habe eine UITableView, die eine Menge von Bildern in den Zellen zeigt, und ich beendigte bin nicht glücklich über die Scroll-Leistung. Mein UITableView ist so etwas wie das Foto-App auf dem iPhone. Hat jemand weiß, warum das iphone foto App blättert so verdammt schnell, als ob sie nichts auf dem Bildschirm.

Und hat jemand hat einige Tipps / Tricks, um meine Leistung / Scroll-Geschwindigkeit zu erhöhen?

War es hilfreich?

Lösung

Sie sollten Ihre Bilder precache und es nicht träge machen. Wie Sie Ihren Tisch blättern a href die <= „http://developer.apple.com/iphone/library/documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UITableViewDataSource“ rel = „nofollow noreferrer“> UITableViewDataSource: cellForRowAtIndexPath: Methode aufgerufen wird, und wenn Sie Ihre Bilder dort sind Laden in dann werden Sie sehen, es Ihre Zellinhalte als Scroll anfordert, Latenz in Ihrer Anwendung zu schaffen. Versuchen Sie setzen machen Ihre cellForRowAtIndexPath: so etwas wie folgt aus:

NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );

Sie werden sehen, wie lange Sie für immer jede Zelle die Ausgaben sind.

Um dies zu umgehen, können Sie so komplex sein, wie Sie brauchen, um - wenn Sie eine Los von Bildern, Sie gehen immer mehr klug sein zu müssen. Sie können ausgelagerten Lade tun, wo Sie den Überblick über die letzte Zelle des NSIndexPath angefordert halten, und bestimmen, ob die Spirale nach oben oder unten und verwenden + NSImage: imagenamed: auf einmal eine Seite im wert von Bildern holen nach vorn (dh 5 Bilder vorwärts von der aktuellen Position), oder was auch immer für Sie arbeitet (Vorteil der Tatsache, dass die Menschen ihre Finger zurückkehren müssen bis zum Ende der Tabelle wieder zu streichen, und so der Verbrauch von Tabellenelementen hat Pausen - Sie Ihre Seitengröße groß genug, um einen Schlag) zu füllen machen können. Dies ist wahrscheinlich immer noch nicht groß, aber, weil Sie einfach alle auf Ihre Auswirkungen einmal leiden werden statt einer nervösen Last für jede Zelle.

Sie können die Steuerung an die UI schnell wieder und das System ermöglichen, Ihre vorab abgerufenen Bilderseite planen mit NSRunLoop: perform: Ziel: Argument: Ordnung: Modus: Sie den Haupt Runloop mit NSImage. imagenamed :, und dann, wenn die Zelle angefordert wird, wenn Sie weit genug voraus zu holen, es wird zum anzeigen vorhanden sein

Sie müssen schmerzlich bewusst, obwohl der Speicher Sorgen sein. Wenn Sie finden diese ein Problem zu sein, verwenden Sie NSImage: initWithContentsOfFile: , die nach oben Bild-Caches in geringer Speicherkapazität reinigen wird. In Abhängigkeit von der durch den Cache-Annullierungs Algorithmus verwendete Strategie können diese Situationen verursachen ein „Stottern“, wie Sie Caches löschen und haben Ihre ungültig Vorausabrufungen neu zu laden.

Andere Tipps

Große Scrolling Performance-Ergebnisse wurden von Subklassen UITableViewCell und zeichnen den Inhalt jeder Zelle direkt berichtet. Siehe die akzeptierte Antwort für diese Frage , um weitere Informationen und Links zu Codebeispielen.

Das Problem hier Speicher ist, werden Sie auf einmal zu viele hochauflösende Bilder laden, wird das foto App keine Tableview verwenden verwendet es eine Scroll-Ansicht und es lädt nur ein Maximum von 3 Bildern in einer Zeit, so Speicher ist nicht ein Anliegen, wenn u versuchen, etwas ähnlich dem foto App verwenden, um eine Scroll-Ansicht

zu tun
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top