2010-12-07 19 views
1

Hallo bitte sagen Sie mir, wenn es einen Speicherverlust in meinem Code oder nicht gibt ..
Ich lösen meine Speicherlecks in meiner App, aber verwirrt hier wird es ein Speicherleck erstellen?Überprüfen Sie auf Speicherleck

 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]; 

Antwort

4

Dieser Code wird Speicher verlieren. Sie weisen DataArray neu zu, ohne den alten Wert freizugeben. Führen Sie die Zuweisung über eine generierte Eigenschaft durch, und der alte Wert wird zuerst freigegeben.

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

Sie können auch Ihren Code neu strukturieren Erstellung des Arrays zu vermeiden, es sei denn, Sie es wirklich brauchen:

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

Gut Abholung. Sie können Ihr NSMutableArray auch mit einer bequemeren/automatisch freigegebenen Methode wie [NSMutableArray arrayWithCapacity: (NSUInteger) numItems] – Rog

+0

@Rog - Fairpoint initialisieren, aber wahrscheinlich ist es einfacher, den Code zu verstehen, wenn das Array nur erstellt wird, wenn es benötigt wird. Ich habe meine Antwort aktualisiert – willcodejavaforfood

+0

+1 - Danke ......... – Saawan