Ios iPhone中的objective-c内存管理问题

Ios iPhone中的objective-c内存管理问题,ios,nsxmlparser,Ios,Nsxmlparser,我是iphone开发新手,我在下面的代码中面临内存泄漏 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if(!currentNodeContent) currentNodeContent = [[[NSMutableString alloc] initWithString:string] autorelease]; else [currentNodeContent appendS

我是iphone开发新手,我在下面的代码中面临内存泄漏

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentNodeContent)
    currentNodeContent = [[[NSMutableString alloc] initWithString:string] autorelease];
else
    [currentNodeContent appendString:string];
}
在使用仪器工具进行分析时,我收到了此代码中100%的内存泄漏

currentNodeContent = [[[NSMutableString alloc] initWithString:string] autorelease];

有谁能给我建议一下解决这个泄漏的方法吗?仪器很擅长发现泄漏的物体。它不太善于告诉你泄漏的源头。如果这是对象泄漏,不是因为此代码,而是因为代码中的其他地方,您保留了此
currentNodeContent
(可能是将其添加到从未发布过的其他数据结构中)

静态分析仪(移位)+⌘+B)或在Xcode“产品”菜单上选择“分析”,有时可以识别泄漏源。我会确保你在那里得到一份干净的健康证明,甚至不用担心仪器

如果您仍在泄漏,我将在
didEndElement
中查看您对
currentNodeContent
所做的操作,并从这一点开始查看您的内存管理


您还可以查看Instruments User Guide部分并查看其他建议(例如,此处讨论的“循环和根”可能有助于您遵循此泄漏对象的对象图)。

将此行替换为
currentNodeContent=[string mutablecopy]并查看这是否可行。

您是否已经在任何其他方法中alloc和init currentNodeContent?这是必须的“使用ARC”注释。如果您正在编写新代码,没有什么理由不使用ARC。ARC与非ARC代码一起工作,一直工作到iOS 4.2(减去弱引用)。其中是currentNodeContent的声明。它是财产吗?如果是,您是否有与之关联的retain?我们需要查看
currentNodeContent
的声明以及引用
currentNodeContent
的任何其他代码。到目前为止,你发布的代码没有泄漏。无意冒犯,但这不是一个好主意。它没有解决这个问题,但引入了另一个问题:如果XML元素内容是一个长字符串,需要多次调用
foundCharacters
,那么您将丢弃以前的内容,实际上只返回元素值的最后一部分。