Domanda

Ho un UITableView che visualizza un sacco di immagini nelle cellule, e non sto smesso contento delle prestazioni di scorrimento. Il mio UITableView è qualcosa come la foto app su iPhone. Fa qualcuno sa perché l'iPhone app foto scorre in modo dannatamente veloce come se la loro niente sullo schermo.

E fa qualcuno ha alcuni consigli / trucchi per aumentare la mia velocità di prestazioni / scorrimento?

È stato utile?

Soluzione

Si dovrebbe precache le immagini e non farlo pigramente. Mentre si scorre la tavola con la UITableViewDataSource: cellForRowAtIndexPath: metodo si chiama, e se si desidera caricare le immagini in là allora vedrete che richiede il contenuto delle celle come scorrimento, creando la latenza nell'applicazione. Prova a mettere rendere il vostro cellForRowAtIndexPath: qualcosa di simile:

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

Vedrai quanto tempo si sta spendendo per ottenere ogni cella.

Per aggirare il problema, si può essere così complesso come è necessario - se si dispone di un molto di immagini, si sta andando ad avere per essere sempre più intelligente. Si può fare carico di paging, dove si tiene traccia dell'ultima cella di richiesta NSIndexPath, e determinare se il rotolo sta andando verso l'alto o verso il basso e utilizzare + NSImage: imageNamed: per andare a prendere subito qualche pagina vale la pena di immagini in avanti (ad esempio, 5 immagini in avanti della vostra posizione corrente), o quello che funziona per voi (approfittando del fatto che le persone devono restituire loro dito fino al fondo della tabella di strisciare di nuovo, e quindi il consumo di elementi della tabella ha pause - è possibile rendere la dimensione della pagina abbastanza grande da riempire un colpo). Questo è probabilmente ancora non è grande, però, perché devi semplicemente essere affetti tutto il vostro impatto in una volta, invece di un carico nervosa per ogni cella.

È possibile restituire il controllo dell'interfaccia utente in modo rapido e consentire al sistema di programmare la vostra pagina di precaricato di immagini utilizzando NSRunLoop: performSelector: obiettivo: argomento: ordine: modalità: largo della runloop principale utilizzando NSImage:. imageNamed :, e poi, quando è richiesta la cella se si sta recupero abbastanza avanti sarà disponibile per visualizzare

È necessario essere dolorosamente consapevole delle preoccupazioni della memoria però. Se si sta trovando che questo sia un problema, utilizzare NSImage: initWithContentsOfFile: , che ripulire le cache di immagine in situazioni di memoria insufficiente. A seconda della strategia utilizzata dall'algoritmo di invalidazione della cache queste situazioni possono causare un "balbuzie", come si eliminare cache e devono ricaricare le precaricamenti invalidato.

Altri suggerimenti

i risultati delle prestazioni Grande scorrimento sono stati riportati da sottoclassi UITableViewCell e disegnando il contenuto di ogni cella direttamente. Vedere la risposta accettata per questa domanda per maggiori dettagli e link a esempi di codice.

Il problema qui è la memoria, che si sta caricando troppe immagini ad alta risoluzione in una sola volta, il foto applicazione non fa uso di un Tableview utilizza una vista di scorrimento e carica solo un max di 3 immagini alla volta, quindi la memoria non è una preoccupazione, se u stanno cercando di fare qualcosa di simile per il foto app utilizzare una vista di scorrimento

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top