我有一个利用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内存管理的基础知识(“如果你分配,复制或新发布......由你决定”),所以我不需要对基础知识进行全面的介绍 - 只是了解为何泄漏的原因。
提前感谢您的帮助。
编辑:附加调试信息的图像。
答案 0 :(得分:3)
有什么仪器告诉你的不是泄漏发生在那条线上,而是告诉你在那条线上创建的对象泄露了。
我将再次查看使用scanJSONStringConstant方法的客户端代码并查看其内存管理。是否存在可能错过outStringConstant指针的释放调用的逻辑流程?
答案 1 :(得分:1)
更改此行*outStringConstant = [[theString copy] autorelease];
要
if(*outStringConstant)
[*outStringConstant release];
*outStringConstant = [NSString stringWithString:theString];
[theString release];