2011-01-11 69 views
0

我是iPhone新手。我寫了一個小應用程序。該應用程序的一部分在模擬器中運行良好。我不明白以下內容:瞭解目標C的參考計數/泄漏

分析儀不同意代碼。 「方法返回一個帶有+1保留計數的Objective-C對象(擁有引用)」他說。

有人幫我。

謝謝...

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
if ([elementName isEqualToString:@"item"]) { 
    [item setObject:currentTitle forKey:@"name"]; 
    [item setObject:currentAutor forKey:@"descr"]; 
    [item setObject:currentContact forKey:@"contact"]; 

    [rssArray addObject:[item copy]]; 

    NSLog(@"Nachricht: %@", currentTitle); 
    [item release]; 

} 
[rssArray release]; 
} 

回答

11

[rssArray addObject:[item copy]];

該生產線生產內存泄漏,由於rssArray發送保留[項目複製]和[項目拷貝]創建新的對象,對象[項目拷貝]將有retainCount = 2,但只會被釋放一次。 您應該使用[[item copy] autorelease],或將[item copy]分配給臨時變量,並在將其添加到數組後將其釋放。

+1

Nickolay是對的。它完全取決於你的程序,但可能你甚至不需要深層拷貝([rssArray addObject:[item copy]];)大多數情況下淺拷貝就足夠了([rssArray addObject:item];) – nacho4d 2011-01-11 14:28:56