Sto lavorando ad un'app per iPhone che ha un UITableView piuttosto grande con dati presi dal web, quindi sto cercando di ottimizzarne la creazione e l'utilizzo.iPhone - dequeueReusableCellWithIdentificatore di utilizzo
Ho scoperto che dequeueReusableCellWithIdentifier è piuttosto utile, ma dopo aver visto molti codici sorgente usando questo, mi chiedo se l'utilizzo che faccio di questa funzione sia il migliore.
Ecco quello che la gente di solito:
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"];
// Add elements to the cell
return cell;
E qui è il modo in cui l'ho fatto:
// The cell row
NSString identifier = [NSString stringWithFormat:@"Cell %d", indexPath.row];
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell != nil)
return cell;
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier];
// Add elements to the cell
return cell;
La differenza è che le persone utilizzano lo stesso identificatore per ogni cellula, così l'accodamento uno evita solo di assegnarne uno nuovo.
Per me, il punto di accodamento era di assegnare a ciascuna cella un identificatore univoco, quindi quando l'app richiede una cella già visualizzata, non è necessario eseguire né l'allocazione né l'aggiunta di elementi.
Con il bel Non so quale sia il migliore, il metodo del "comune" ceils utilizzo della memoria della tabella per il numero esatto delle cellule esso esposizione, whislt il metodo che uso sembra favorire la velocità in quanto mantiene tutto calcolato celle, ma può causare un notevole consumo di memoria (a meno che non ci sia un limite interno alla coda).
Ho sbagliato a usarlo in questo modo? O dipende solo dallo sviluppatore, a seconda delle sue esigenze?
Hai ragione sul fatto che con il mio metodo un array potrebbe fare il lavoro. Le ~ 100 celle rappresentano una quantità troppo grande di memoria allocata contemporaneamente? – Jukurrpa
Bene, ho cambiato per il metodo comune (che è complicato quando una riga ha molte sottoview), e oltre al minor consumo di memoria, lo scorrimento generale sembra più agevole, non sono sicuro del perché. Grazie comunque per il consiglio! – Jukurrpa
@progrmr ... grazie ... per chiarire il concetto .. è davvero bello ... ho fatto anche lo stesso errore .. :) –