【问题标题】:Understanding reference counting with Objective C / Leak使用 Objective C / Leak 理解引用计数
【发布时间】:2011-01-11 14:21:17
【问题描述】:

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

分析器不同意代码。 “方法返回一个具有 +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];
}

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    [rssArray addObject:[item copy]];

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

    【讨论】:

    • 尼古拉是对的。这完全取决于您的程序,但也许您甚至不需要深拷贝,([rssArray addObject:[item copy]];)在大多数情况下,浅拷贝就足够了,([rssArray addObject:item];)
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2013-01-07
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多