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

时间:2013-07-25 11:51:59

标签: ios nsxmlparser

我是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];

任何人都可以建议我解决这个漏洞的方法

2 个答案:

答案 0 :(得分:0)

仪器非常适合发现泄漏的物体。告诉你泄漏的来源并不是那么好。如果这是对象泄漏,那不是因为这个代码,而是代码中的其他地方,你保留了这个currentNodeContent(可能将它添加到其他一些从未发布它的数据结构中)。

静态分析器( shift + + B 或在Xcode“产品”菜单上选择“分析”)有时可以识别来源泄漏我会确保你在使用仪器之前得到一份干净的健康状况。

如果您仍然在泄漏,我会在currentNodeContent中查看您对didEndElement所做的事情,并从那时开始查看您的内存管理。

您还可以查看 Instruments用户指南Finding Leaks部分,并查看其他建议(例如,在此讨论的“Cycles and Roots”可能有助于您遵循这个泄漏对象的对象图。)

答案 1 :(得分:0)

将此行替换为currentNodeContent = [string mutablecopy];,看看是否有效。