2012-04-10 5 views
0

Es gibt Speicherlecks in der unten self.listOfCustDetail und self.listOfCustomerSpeicherleck in NSArray, Spuren für lange Zeit

-(void) calCustList { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *plistPath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"customer.plist"]; 

    self.listOfCustDetail = [[[NSMutableArray alloc] init] autorelease]; 
    self.listOfCustomer = [[[NSMutableArray alloc] init] autorelease]; 
    self.customers = [[[NSMutableDictionary alloc] initWithContentsOfFile:plistPath] autorelease]; 

    [self.listOfCustomer removeAllObjects]; 
    [self.listOfCustDetail removeAllObjects]; 

    [self.listOfCustomer addObject:@"新紀錄"]; 
    [self.listOfCustDetail addObject:@""]; 

    for (id key in self.customers) { 
     NSString *s = [NSString stringWithFormat:@"%@,%@,%@,%@", [[self.customers objectForKey:key] objectAtIndex:0], [[self.customers objectForKey:key] objectAtIndex:1], [[self.customers objectForKey:key] objectAtIndex:2], [[self.customers objectForKey:key] objectAtIndex:3]]; 
     [self.listOfCustomer addObject:key]; 
     [self.listOfCustDetail addObject:s]; 
    } 
} 
+1

Wie Sie wissen ein Leck gibt? –

Antwort

0

Wie Sie Ihre Eigenschaften definiertem sind? behalten sie? Wenn sie behalten, gibt es keinen tatsächlichen Fehler in dem Code, den Sie zeigen.

Wie oft wird diese Methode aufgerufen? Wenn es sehr oft aufgerufen wird, können Sie eine benutzerdefinierte NSAutoreleasePool verwenden.

Auch die beiden folgenden Zeilen sind nicht auf einem neu initialisiert Array benötigt:

[self.listOfCustomer removeAllObjects]; 
[self.listOfCustDetail removeAllObjects]; 

Sie die aktuelle Quelltext zeigen?

+0

Ich kann nicht glauben, dass dies der eigentliche Quellcode ist, weil er sich die Mühe macht, listOfCustomer und listOfCustDetail zu erstellen, und nichts mit ihnen macht. Ich stimme zu, dass wenn er leckt, er implizit in dem Teil des Codes, den er noch nicht mit uns geteilt hat, etwas zu tun hat. – Rob

+0

naja die daten sind in members gespeichert .. also vielleicht ist es der echte code .. aber jedenfalls. kein Fehler in diesem Code .. er muss uns mehr/echten Code zeigen. – calimarkus

+0

Ganz richtig, die Methode, die CalCustList aufruft, kann diese Ivars verwenden. Aber wenn er leckt, muss es sein, dass listOfCustomer und listOfCustDetail irgendwo anders gespeichert werden. Es könnte Zeit für user1324421 sein, den Befehl "batch-shift-command-B" zum "Auswerten" des Codes für den richtigen Ausgleich von Allocs/Inits und Releases zu verwenden. Oder beginnen Sie mit dem Eintragen von nslog-Anweisungen, die Ihre Retain-Zählungen und Ähnliches untersuchen. Oder gehe zu ARC und ein Teil dieser Albernheit verschwindet. – Rob

0

Ich mag würde vorschlagen, ermöglichen ARC (Autoreferenzzählung) im Projekt, weil Sie keine Notwendigkeit, Arrays Zum Lösen