2010-12-07 21 views
1

Salut s'il vous plaît dites-moi s'il y a une fuite de mémoire dans mon code ou non ..
Je résous mes fuites de mémoire dans mon application mais confus ici va-t-il créer une fuite de mémoire?Vérifier la fuite de mémoire

 NSMutableArray *dataArray=[[NSMutableArray alloc]init]; 

if(condition) 
{ 
     [dataArray addObject:[appDelegate selectFromDatabase:x]];//returning an autoreleased array 
} 
else 
{ 
dataArray=[appDelegate selectFromDatabase:a]; 
} 
    //use dataArray 

     [dataArray release]; 

Répondre

4

Ce code présente une fuite de mémoire. Vous réaffectez dataArray sans libérer l'ancienne valeur. Effectuez l'affectation via une propriété générée et l'ancienne valeur sera publiée en premier.

else 
{ 
    dataArray=[appDelegate selectFromDatabase:a]; 
} 

Vous pouvez également restructurer votre code pour éviter de créer le tableau, sauf si vous avez vraiment besoin:

if (condition) 
{ 
    // Create array here 
} 
else 
{ 
    // get array from other place 
} 
+0

Bonne récupération. Vous pouvez également choisir d'initialiser votre NSMutableArray avec une méthode de commodité/autoreleased telle que [NSMutableArray arrayWithCapacity: (NSUInteger) numItems] – Rog

+0

@Rog - Point juste, mais probablement plus facile à comprendre le code si le tableau est seulement créé SI cela est nécessaire. J'ai mis à jour ma réponse – willcodejavaforfood

+0

+1 - Merci ......... – Saawan