Iphone委托内存泄漏问题

时间:2009-12-23 13:03:59

标签: iphone cocoa cocoa-touch iphone-sdk-3.0

我需要你的帮助,我已经完成了这个项目。

<德尔> 当我将我的应用程序运行到仪器中时,→←标记的行给出了memoryleak。当第一次运行时一切正常但第二次→←标记线给内存泄漏,我不明白为什么? 我尝试了很多东西,我也使用了NSAutoReleasePool但结果相同。 有人可以帮我吗?     SBJSON * json = [[SBJSON alloc] init];  error = nil;  →NSDictionary * results = [json objectWithString:响应错误:&amp; error]; ←  [json release];  [回复发布];  NSArray * responsedNetworks = [results objectForKey:@“networks”];  NSMutableArray * serverResponse = [[NSMutableArray alloc] initWithArray:responsedNetworks]; 编辑: 我将我的示例应用程序上传到这个地址:[已删除] [1]现在,我确定问题来源不是代理,但我不知道问题出在哪里,我确信Instruments显示错误的地方内存泄漏。我试过很多东西可以有人告诉我我的错误吗?

谢谢

编辑2: 伙计不幸的是,我尝试过Clang静态分析仪,因为我预计它会对某些代码行发出一些警告,我修复了这些警告。

现在,仪器发出泄漏错误,但Clang说项目没有错误。

最后,我的问题没有消失。

请下载最新的示例应用程序,你可以用你的眼睛看到这是 EXAMPLE Project source

如何查看这些泄漏: 打开项目并开始在模拟器上进行调试(版本无关紧要)。启动调试,您将在打开的第一个窗口的角落顶部看到信息按钮。按下并打开它,在关闭信息窗口后再次打开它,此时您应该看到仪器的泄漏消息。但Clang没有给出任何意义,我的意思是Clang方面的一切都很好。

我真的很困惑?我该怎么办?

2 个答案:

答案 0 :(得分:1)

仪器未指明导致泄漏的线路。它表示分配了后来泄漏的内存的行。只是从给出的代码(显然不是整个代码),我怀疑你正在泄漏serverResponse,其中包括你标记的行中分配的内存。不要只看文书给你的线。什么课程漏水?这将提供与线路一样多的暗示。

由于你开始遇到内存管理问题,建议:当你发布内容时,总是将其设置为nil。这将为您节省大量的头痛和崩溃。在这种情况下,我说的是jsonresponse

[json release];
json = nil;

如果您有Snow Leopard和Xcode 3.2,请运行Analyzer(Cmd-Shift-A)。它会自动找到最常见的内存问题。

答案 1 :(得分:0)

有一种工具比仪器更容易使用。该工具是Clang Static Analyzer。 The website describes如何安装和使用工具集。它非常易于使用且非常高效。我一直都在使用它。

命令是:

xcodebuild clean
scan-build -k -V xcodebuild

在网页浏览器中显示结果非常简单!它将捕获仪器无法捕获的泄漏。这是Apple在Snow Leopard中集成的工具......它也可以在Leopard中使用。查看the website for directions ..

希望这有帮助!