Bonjour à tous. Je suis "novice" en programmation Objective-C. J'ai à peu près compris le système de fonctionnement de la mémoire, mais j'ai un soucis de fuite que je n'arrive pas à comprendre. Je suis sur un programme de simulation numérique qui nécessite une boucle énorme (environ 1 million de pas), et un tableau de données énorme aussi. J'étais arrivé à la limite du tableau C classique (Environ 30000 doubles). Je me suis donc mis au NSArray, mais après la modification de mon code : fuite mémoire ! En fait, il faut que je remplisse le NSArray avec des objets, donc mes valeurs doubles doivent être converties en NSNumbers.
Donc, je remplis mon NSArray (Spins) avec des NSNumbers au départ, puis dans cette fameuse boucle gigantesque, je ne fait que lire ces NSNumbers, et les remplacer par d'autres. Comment faire autrement ?
Voici les principes du code
do
{
//Spins est mon NSArray. Lectures
Sx=[[Spins objectAtIndex: position] doubleValue];
//Ecritures
[Spins replaceObjectAtIndex: position withObject:[NSNumber numberWithDouble:SxNew]];
}while (condition);
D'où vient la fuite ?
Pour l'écriture dans le NSArray, j'ai essayé avec un objet "tampon" NSNumber *tamponNombre
do {
////Ecriture
tamponNombre=[NSNumber numberWithDouble:SxNew];
[Spins replaceObjectAtIndex: position withObject:[NSNumber numberWithDouble:SxNew]];
[tamponNombre release];
}while(condition);
Toujours la fuite ! :hein:
HELP ME !
Je tiens à souligner que le calcul se fait dans un thread, et donc qu'un NSAutoreleasePool a été mis en place au début de la méthode.
Donc, je remplis mon NSArray (Spins) avec des NSNumbers au départ, puis dans cette fameuse boucle gigantesque, je ne fait que lire ces NSNumbers, et les remplacer par d'autres. Comment faire autrement ?
Voici les principes du code
do
{
//Spins est mon NSArray. Lectures
Sx=[[Spins objectAtIndex: position] doubleValue];
//Ecritures
[Spins replaceObjectAtIndex: position withObject:[NSNumber numberWithDouble:SxNew]];
}while (condition);
D'où vient la fuite ?
Pour l'écriture dans le NSArray, j'ai essayé avec un objet "tampon" NSNumber *tamponNombre
do {
////Ecriture
tamponNombre=[NSNumber numberWithDouble:SxNew];
[Spins replaceObjectAtIndex: position withObject:[NSNumber numberWithDouble:SxNew]];
[tamponNombre release];
}while(condition);
Toujours la fuite ! :hein:
HELP ME !
Je tiens à souligner que le calcul se fait dans un thread, et donc qu'un NSAutoreleasePool a été mis en place au début de la méthode.