2010-12-14 18 views
0

Ich verwende zwei Objekte, d. H. PagesUrl und pagesXmlParser, im Code und nach ihrer Verwendung, um diese beiden Objekte freizugeben. Es läuft gut, aber es zeigt sie in Speicherlecks. Als ich versuchte, es zu überprüfen, überprüfte ich die Referenzzählung dieser Objekte und zeigte '1', selbst nachdem die Objekte freigegeben wurden. kann mir jemand helfen, wie man dieses Leck entfernt und wie man diese bestimmten Objekte im folgenden Code freigibt.iPhone: Speicherleck in diesem Code?

-(void)loadPagesForChapter:(NSString *)path{ 
// have to parse the pages xml for this chapter 

    NSURL *pagesUrl = [[NSURL alloc] initFileURLWithPath:[self pagesXmlPath:path]]; 

    NSXMLParser *pagesXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:pagesUrl]; 

    PagesAccumulator *pageLoader = [[PagesAccumulator alloc] init]; 
    pagesXmlParser.delegate = pageLoader; 

    [pagesXmlParser parse]; 

// parsing pages done 
// get the pages array 
self.arrayOfPages = pageLoader.arrayOfPages; 

    [pageLoader release]; 
[pagesXmlParser release]; 
[pagesUrl release]; 
NSLog(@"pagesurl retain count is:%d",[pagesUrl retainCount]); 
    NSLog(@"pagesxmlparser retain count is:%d",[pagesXmlParser retainCount]); 
} 

Vielen Dank im Voraus für jede Hilfe.

+1

Lecks im Gerät oder im Simulator - wenn es im Simulator Lecks gibt, testen Sie es auf dem Gerät - der Simulator liefert manchmal falsche Ergebnisse! – deanWombourne

Antwort

3

Ignorieren der Zählungen behalten

Nur weil ein Objekt eine Zählung beibehalten hat> 0 bedeutet nicht, dass es nicht auch ist Autoreleased :)

Ihr Code sieht für mich in Ordnung. Wenn es sich wirklich um ein Leck handelt, würde ich mir Ihre Implementierung von PageLoader ansehen, um zu sehen, ob in einer der NSXMLParserDelegate-Methoden ein Retain vorhanden ist, das verhindert, dass der Parser freigegeben wird (was ebenfalls dazu führen würde, dass die URL leckt).

+0

Danke für Ihre Antwort. es hat gut funktioniert .. vielen Dank ... – raj