Je travaille sur une application iPhone qui comporte un UITableView assez important avec des données provenant du web. J'essaie donc d'optimiser sa création et son utilisation.
J'ai découvert que dequeueReusableCellWithIdentifier
est assez utile, mais après avoir vu de nombreux codes sources l'utiliser, je me demande si l'usage que je fais de cette fonction est le bon.
Voici ce que les gens font habituellement :
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"];
// Add elements to the cell
return cell;
Et voici comment je l'ai fait :
// 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 différence est que l'on utilise le même identifiant pour chaque cellule, de sorte que la mise en file d'attente d'une cellule évite d'en attribuer une nouvelle.
Pour moi, l'intérêt de la mise en file d'attente était de donner à chaque cellule un identifiant unique, de sorte que lorsque l'application demande une cellule qu'elle a déjà affichée, il n'y a ni allocation ni ajout d'élément à faire.
In fine Je ne sais pas ce qui est le mieux, la méthode "commune" limite l'utilisation de la mémoire du tableau au nombre exact de cellules qu'il affiche, tandis que la méthode que j'utilise semble favoriser la rapidité car elle conserve toutes les cellules calculées, mais peut entraîner une grande consommation de mémoire (à moins qu'il n'y ait une limite interne à la file d'attente).
Ai-je tort de l'utiliser de cette façon ? Ou est-ce que c'est au développeur d'en décider, en fonction de ses besoins ?