2010-12-08 18 views
3

Je suis assez sûr que ce que je fais ici est juste, mais je voulais juste vérifier que le [cell autorelease] ne libère pas mes cellules trop tôt et que dequeueReusableCellWithIdentifier a placé des cellules en file d'attente en attente de réutilisation. Ma compréhension est que la file d'attente est une entité séparée dans la mesure où elle stocke un plan pour la cellule (un peu comme une plume) et pas l'objet réel?UITableViewCell, dequeue et autorelease?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LOC_ID"]; 
    if(cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"LOC_ID"]; 
     [cell autorelease]; 
    } 
    NSUInteger row = [indexPath row]; 
    //id thisLocation = [locationList objectAtIndex:row]; 
    [[cell textLabel] setText:[NSString stringWithFormat:@"R_%u", row]]; 
    return cell; 
} 

EDIT:Pour clarifier, je suis intéressé par le ce qui se passe en ce qui concerne la durée de vie et les cellules. Je comprends que je les alloue et ensuite les libère automatiquement, est-ce que la table prend alors possession des cellules après leur retour de cellForRowAtIndexPath? alors ils appartiennent à l'UITableView, ou suis-je confus?

Répondre

2

Non, il stocke réellement l'objet de cellule par identifiant. Lorsque la table est créée pour la première fois, la cellule est créée de A à Z.

Ainsi, lorsque vous faites défiler la tableview, les nouvelles cellules sont retirées en fonction de l'identifiant. Pour des raisons de performances, il peut être réutilisé, par exemple, en définissant du texte sur la cellule; il n'est donc pas nécessaire de créer une nouvelle cellule à partir de zéro.