Trucchi per migliorare le prestazioni di scorrimento di UITableView iPhone?

Ho una visione utente che carica immagini abbastanza grandi in ogni cella e l’altezza della cella varia a seconda della dimensione dell’immagine. Le prestazioni di scorrimento sono decenti, ma a volte possono essere a scatti.

Ho trovato questi suggerimenti che ho trovato sul blog di FieryRobot:

vitreo-scrolling-con-UITableView

più-vitreo-scrolling-con-UITableView

Qualcuno ha qualche consiglio per migliorare le prestazioni di scorrimento di uitableview?

  1. Memorizza l’altezza delle righe nella cache (la vista tabella può richiederlo frequentemente)
  2. Crea una cache usata meno di recente per le immagini utilizzate nella tabella (e invalida tutte le voci inattive quando ricevi un avviso di memoria)
  3. Disegna tutto nel drawRect: UITableViewCell drawRect: se ansible, evita di subvedere a tutti i costi (o se richiedi la funzionalità di accessibilità standard, drawRect: della vista del contenuto drawRect:
  4. Rendi il tuo strato di UITableViewCell opaco (lo stesso vale per la vista del contenuto, se ne hai uno)
  5. Utilizzare la funzionalità reusableCellIdentifier come raccomandato dagli esempi / documentazione di UITableView
  6. Evita gradienti / complicati effetti grafici che non sono precotti in UIImage s
  1. Se si sottoclass UITableViewCell , non utilizzare un pennino, invece di scriverlo in codice. È molto più veloce del caricamento dei file di pennini.
  2. Se stai usando le immagini, assicurati di metterle nella cache in modo da non dover caricare file più di una volta per ciascuna (se hai la memoria – rimarrai sorpreso di quanto spazio occupino le immagini).
  3. Rendi più opachi il maggior numero ansible di elementi. Allo stesso modo, prova a non usare le immagini con trasparenza.

Lo sviluppatore di Tweetie ha scritto ampiamente su questo e ha un codice che dimostra come è stato fatto per quell’app. Fondamentalmente, lui / lei sostiene una vista personalizzata per cella di tabella, e disegnandola manualmente (piuttosto che sottoporre a revisione con Interface Builder, tra le altre opzioni).

fast-scrolling-in-Tweetie-con-UITableView

Inoltre, Apple ha aggiornato il proprio codice di esempio per TableView nelle sue esercitazioni TableViewSuite (forse in risposta a questo?)

TableViewSuite

# 1 Il killer delle prestazioni per lo scorrimento di UITableView sta disegnando ombre su qualsiasi livello di visualizzazione delle celle, quindi se le prestazioni di scorrimento sono importanti, allora non creare ombre a meno che fondamentalmente non rallenti il ​​thread principale.

pensavo che questo doveva essere detto poiché nessuna delle risposte accettate faceva menzione di ombre e strati. : +)

Qualsiasi problema con le prestazioni di scorrimento di UITableView può essere risolto utilizzando tecniche già descritte in altre risposte. Tuttavia, molte volte le prestazioni lente sono causate da qualcosa di intrinsecamente errato o ripetitivo.

Il fatto che UITableView riutilizza le celle e il fatto che ogni cella abbia bisogno della propria immagine – insieme rende il bit della soluzione complesso. Da come viene risolto il modo generale, qui riassumo le cose che dovrebbero essere curate:

  1. Carica i dati nell’origine dati – da REST / database. Questo passaggio dovrebbe essere eseguito sullo sfondo, eventualmente utilizzando dispatch_async insieme alla coda GCD.
  2. Creare e inizializzare gli oggetti del modello di dati rilevanti e inserirli in una matrice
  3. [tableView reloaddata]
  4. All’interno di cellForRowAtIndexPath , include il codice che imposterà i dati (testo) dall’object modello dati corretto dell’array.
  5. Ora anche le immagini possono essere sotto forma di URL, quindi questo passaggio potrebbe essere poco eccentrico a causa del riutilizzo delle celle fatto dalla vista tabella. Il nocciolo del fatto è caricare nuovamente un’immagine dalla cache / URL del dispositivo utilizzando la coda asincrona, quindi impostarla per correggere cell.image (qualunque sia la proprietà dell’immagine della cella).

Per evitare problemi, fare riferimento a questo tutorial sul caricamento lento delle immagini nella vista tabella.