NSString复制内存泄漏

时间:2011-04-07 19:06:49

标签: objective-c cocoa xcode memory-leaks instruments

我有一个利用TouchJSON目标-C库的应用程序,我正在运行仪器分析器,以防止内存泄漏并在该源中泄漏,我无法弄清楚如何修复。我应该提一下,我对Cocoa和Objective-C相当新。仪器显示泄漏发生在具有以下特征的方法中:

- (BOOL)scanJSONStringConstant:(NSString **)outStringConstant error:(NSError **)outError

...而且泄漏特意发生在这段代码中:

if (self.options & kJSONScannerOptions_MutableLeaves)
{
     *outStringConstant = [theString autorelease];
}
else
{
    *outStringConstant = [[theString copy] autorelease];   //LEAK IS HAPPENING HERE
    [theString release];
}

我尝试了各种修复措施,试图摆脱泄漏,但没有成功。有人可以教我:

1)为什么这是泄漏

...和...

2)如何解决它

我熟悉Objective-C内存管理的基础知识(“如果你分配,复制或新发布......由你决定”),所以我不需要对基础知识进行全面的介绍 - 只是了解为何泄漏的原因。

提前感谢您的帮助。

编辑:附加调试信息的图像。 Debug Info

2 个答案:

答案 0 :(得分:3)

有什么仪器告诉你的不是泄漏发生在那条线上,而是告诉你在那条线上创建的对象泄露了。

我将再次查看使用scanJSONStringConstant方法的客户端代码并查看其内存管理。是否存在可能错过outStringConstant指针的释放调用的逻辑流程?

答案 1 :(得分:1)

更改此行*outStringConstant = [[theString copy] autorelease];

if(*outStringConstant)
   [*outStringConstant release];

*outStringConstant = [NSString stringWithString:theString];
[theString release];