0

J'essaie toujours de trouver mon chemin à travers la gestion de la mémoire pour l'iPhone SDK, et je ne suis pas sûr pourquoi Instruments signale un certain bloc de code comme une fuite de mémoire. J'ai suivi des tutoriels pour ces parties du code, donc je ne suis pas vraiment sûr de ce que je fais mal.Pourquoi Instruments signale-t-il le code UITableViewCell personnalisé comme une fuite de mémoire?

Le bloc ne respecte pas de code:

DreamTableCell *cell = (DreamTableCell *)[tableView dequeueReusableCellWithIdentifier:cellID]; 
if (cell == nil) 
    cell = [[[DreamTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellID] autorelease]; 

En outre, il existe une méthode personnalisée de DreamTableCell où le fichier NIB est chargé de l'UITableViewCell, rien d'anormal, pour autant que je sache:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier { 
    NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"DreamTableCell" owner:nil options:nil]; 
    for (id item in objs) 
     if ([item isKindOfClass:[DreamTableCell class]]) { 
      self = item; 
      break; 
     } 
    return self; 
} 

Qu'est-ce qui cause la fuite de mémoire ici - qu'est-ce qui me manque?

Répondre

3

Il est la ligne:

self = item; 

vous configurez self à une nouvelle variable d'instance, et puisque vous êtes dans init, une instance existante a été créé. Vous devez libérer le tout nouveau soi avant de le mettre à autre chose:

[self release]; 
self = item; 
+0

Agh, je ne sais pas comment j'ai raté cela: P Merci. –