2009-08-25 6 views
0
for (int i=0; i<[images count] ;i++) { 
    [email protected]"http://192.168.0.101/titan/titanimages/"; 
    url=[url stringByAppendingString:[images objectAtIndex:i]]; 
    //NSData *imageData=[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]]; 
    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; 
    destinationPath=[documentsDirectory stringByAppendingString:@"/modelimages"]; 
    destinationPath=[destinationPath stringByAppendingPathComponent:[images objectAtIndex:i]]; 

    [imageData writeToFile:destinationPath atomically:YES]; 

    value=value+divideValue; 
    printf("%f\n",value); 
    [NSThread detachNewThreadSelector:@selector(updateProgressBar)toTarget:self withObject:nil]; 
} 

Ce code présente une fuite de mémoire: il ne libère pas de mémoire de NSdata et après un certain temps, l'utilisation de la mémoire de l'application atteint 61 Mo. Quelqu'un peut-il m'aider à m'en sortir?Memory Leak Copie de données à partir du serveur

Répondre

0

Pas sûr à 100%, mais cela a probablement à voir avec l'utilisation du "constructeur de commodité" avec la classe NSData en particulier. Lorsque vous appelez "dataWithContentsOfURL", vous récupérez un objet NSData qui est automatiquement libéré. Cependant, votre NSAutoreleasePool actuel peut ne pas être dans une portée qui entraînera la libération de cette mémoire jusqu'à la fermeture de l'application. Vous pouvez essayer de revenir à l'appel alloc/init que vous avez commenté et essayer de libérer manuellement chaque objet NSData dans la boucle, pour garantir que la mémoire NSData est libérée pour chaque instance de NSData créée dans la boucle (après avoir enregistré désactiver le NSData dans le fichier).

Questions connexes