Quando Apple ha sviluppato lo UITableView
per il primo iPhone ha avuto un problema nelle prestazioni durante lo scorrimento. Poi un ingegnoso ingegnere ha scoperto che la causa di ciò era che l'allocazione di oggetti comportava un prezzo, quindi ha escogitato un modo per riutilizzare le celle.UITableView dequeueReusableCellWithIdentifier Theory
"allocazione degli oggetti ha un costo delle prestazioni, soprattutto se l'assegnazione deve avvenire più volte nel corso di un breve periodo per esempio, quando i utente scorre una vista tabella. Se si riutilizzano le celle invece di allocare quelli nuovi, si migliora notevolmente le prestazioni della visualizzazione della tabella. "
Fonte: iOS Reference Library
Per riutilizzare una cella che si utilizza:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Ora, quello che mi chiedo è: cosa succede in realtà qui? Ti sembra nel TableView se c'è una cella con quell'identificatore e lo restituisce? Beh, sì, ma se invia un riferimento invece di allocare e ho una vista tabella con diciamo 4 celle con lo stesso identificatore tutte visibili. Come può moltiplicarsi in quattro istanze senza allocare?
Voglio sapere perché sto costruendo un componente di tipo calendario e tutte le celle hanno la stessa struttura solo il testo all'interno delle modifiche. Quindi se potessi in qualche modo riutilizzare le mie celle invece di allocarle, penso che potrei ottenere una performance migliore.
La mia teoria è che assegna le quattro celle (semplicemente perché ha troppo). Quando una cella scompare dallo schermo verrà inserita nella coda di riutilizzo di TableView. Quando è necessaria una nuova cella, guarda nella coda se è disponibile una cella con lo stesso identificatore, invoca il metodo prepareForReuse
su quella cella e si rimuove dalla coda.
Risposta breve: Sì. Ha una coda/set di riutilizzo separata che non è la stessa cosa già presente nella tabella. –