2010-11-05 12 views
0

J'ai ce code ci-dessous qui charge les images du web. Ces images sont affichées après avoir cliqué sur une cellule de tableau et elles sont rechargées à chaque fois que la cellule du tableau est cliquée. Le fait est que l'analyse de l'allocation de mémoire avec "Instruments", lorsque je reviens de la vue de détail à la table, la mémoire occupée à partir des images n'est pas libérée.iPhone: la mémoire utilisée par les images n'est pas libérée

Quelqu'un a-t-il des suggestions? Je, bien sûr, faire toute la sortie de l'affaire ... mais il semble ne pas aider.

NSError *error = nil; 
    UIImage *img = nil; 
    NSString *myurl = [IMG_SERVER_URL stringByAppendingString: tmp_link.url]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    NSData *imageData = nil; 
    if(myurl!=nil){ 
     imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myurl] options:nil error:&error]; 
     if (error == 0) { 
      img = [[UIImage alloc] initWithData:imageData]; 
     } 
    } 
    [imageData release]; imageData = nil; 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(targetWidth*i, 0, targetWidth, targetHeight)]; 
    imageView.image = img; 
    imageView.contentMode = UIViewContentModeScaleAspectFit; 
    [img release]; 
    [....some code....] 
    [imageView release]; 
+1

Où est publié img? – deanWombourne

+0

J'ai ajouté quelques autres lignes du code, ce qui est logique, merci d'avoir repéré une partie utile manquante. – 0m4r

Répondre

2

Je pense que "imageView.image = img" augmente le nombre de références sur l'objet image. Si j'ai raison, la mémoire allouée ne sera pas libérée tant que vous ne libérerez pas l'imageView.

+0

Je publie imageView plus tard dans le code déjà .... J'ai mis à jour l'extrait de code à nouveau, et merci quand même pour la suggestion! – 0m4r