2011-03-01 62 views
0

我試圖從我的項目中消除內存泄漏,但我堅持在2天的情況下現在。xcode項目 - 內存泄漏

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    if (currentElement) { 
     [currentElement release]; 
     currentElement = nil; 
    } 
    currentElement = [elementName copy]; 

    if ([elementName isEqualToString:@"item"]) { 

     item = [[NSMutableDictionary alloc] init]; //leak #1 

     // DOING OTHER STUFF.... 
     //...................... 
    } 

} 
/*****************************************************************************/ 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 

    if ([elementName isEqualToString:@"item"]){ 

     [item setObject:currentTitle forKey:@"title"]; // leak #2 
     [item setObject:currentLink forKey:@"link"]; //leak #3 

     [bucket addObject:[item copy]]; // NSMutableArray *bucket 
    } 
} 

對於泄漏#1,我試圖釋放內存分配前的項目,但如果我做應用程序崩潰。 (我的意思是,就在item = [[NSMutableDictionary alloc] init];我用

if (item){ 
    [item release]; 
    item=nil; 
} 

在我的dealloc()方法,我也有[item release];

泄漏#2,#3我不知道發生了什麼事 注:2方法是通過一個XML解析器稱爲在解析XML文件,每一個元素read.That就是的NSMutableDictionary *項目被重新用於每個元素的時間。

有什麼建議?謝謝你在前進:)

回答

0

該基因如你所知,對於evey copy,retain,allocnew,還必須有release。我認爲你可以撥打[[item copy] autorelease]並刪除前面的檢查。

如果這樣不能解決任何問題,請嘗試檢查item != nil,而不是if(item)。另外,考慮使用「Build」菜單中的「Build And Analyze」以及「NSZombie」來查找其他內存泄漏。另外,使用Leaks Instumeny來查看導致泄漏的庫。它可能是Apple或你自己的。如果是你的,泄漏將幫助識別它。否則,這不是你的問題。

+0

首先感謝您的回覆。 我已經嘗試autorelease-ing項目,但仍然泄漏。 使用構建和分析顯示一切正常... – CrisDeBlonde 2011-03-01 15:43:24

+0

我認爲你的支票壞了。嘗試檢查'item!= nil',而不是'if(item)'。 – Moshe 2011-03-01 16:21:13

+0

你可能沒有直接給我解決方案,但你迫使我使用NSZombie。那讓我看到了路!謝謝:) – CrisDeBlonde 2011-03-01 16:23:39