Iphone 了解目标C/泄漏的参考计数

Iphone 了解目标C/泄漏的参考计数,iphone,objective-c,Iphone,Objective C,我是iPhone编程新手。我写了一个小程序。应用程序的部分在模拟器中运行良好。我不明白以下几点: 分析仪与代码不一致。“该方法返回一个Objective-C对象,其保留计数为+1(拥有引用)”,他说 有人帮我吗 谢谢 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qN

我是iPhone编程新手。我写了一个小程序。应用程序的部分在模拟器中运行良好。我不明白以下几点:

分析仪与代码不一致。“该方法返回一个Objective-C对象,其保留计数为+1(拥有引用)”,他说

有人帮我吗

谢谢

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

[rssArray addObject:[项目副本]]

此行产生内存泄漏,因为rssArray将retain发送给[item copy],而[item copy]创建了新对象,所以对象[item copy]的retainCount=2,但只释放一次。
您应该使用[[item copy]autorelease],或者将[item copy]分配给临时变量,并在将其添加到数组中后将其释放。

Nickolay是正确的。这完全取决于您的程序,但可能您甚至不需要深度副本([rssArray addObject:[item copy]];)大多数情况下,浅层副本就足够了([rssArray addObject:item];)