【问题标题】:Iphone delegate memory leak problemiphone委托内存泄漏问题
【发布时间】:2010-12-29 11:45:57
【问题描述】:

我需要你的帮助,我正忙于这个项目。

当我将我的应用程序运行到 Instruments 中时,→← 标记的行会导致内存泄漏。当拳头运行一切正常但第二次→←标记线给出内存泄漏,我不明白为什么? 我尝试了很多东西,我也使用了 NSAutoReleasePool 但结果相同。 有人可以帮我吗? SBJSON *json = [[SBJSON alloc] init]; 错误=无; → NSDictionary *results = [json objectWithString:response error:&error]; ← [json发布]; [回复发布]; NSArray *responsedNetworks = [results objectForKey:@"networks"]; NSMutableArray *serverResponse = [[NSMutableArray alloc] initWithArray:responsedNetworks]; 编辑: 我将示例应用程序上传到此地址:[已删除][1] 现在,我确定问题来源不是委托,但我不知道问题出在哪里,我确定 Instruments 显示错误的位置内存泄漏。我尝试了很多东西,有人可以告诉我我的错误吗?

谢谢

编辑 2: 伙计们不幸的是,我尝试了 Clang 静态分析器,正如我预期的那样,它在某些代码行中给出了一些警告,我修复了这些警告。

现在,Instruments 给出泄漏错误,但 Clang 说项目没有错误。

最后,我的问题没有解决。

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

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

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

【问题讨论】:

  • 如果我知道,我会修复它们:)
  • 仪器会告诉您泄漏了哪些对象。请注意,您泄漏的对象(通常)与泄漏它的对象不同。
  • 你检查我的示例项目了吗?

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


【解决方案1】:

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

由于您开始遇到内存管理问题,建议:当您发布某些内容时,请始终将其设置为 nil。这将为您节省很多头痛和以后的崩溃。在这种情况下,我说的是jsonresponse

[json release];
json = nil;

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

【讨论】:

  • 嗨 Rob 谢谢您的回复。我目前正在使用 Leopard 和 X-Code 3.1.4,如果雪豹更有用的话,我会尽快升级我的系统。另一方面,我已经很头疼了,我尝试了很多东西。另一方面,我应该信任 Instruments 吗?可能我最近几天找错地方了。
  • 顺便说一句,我认为可能是来自 SBJSON 的问题(我知道我知道这是愚蠢的想法,即使每个人都使用完美),然后我将 json 解析器行更改为 TouchJson,我看到结果相同,问题在我的代码中,我确定,但我不知道在哪里。我将我的示例应用程序上传到这个位置:hepsikolay.com/MemoryLeakApp.zip 你能下载吗?
  • 然后查看 Classes > Controllers > NetworkSelection.m 第 33 行,您将看到该行 self.networkList = arrayResponse;我想问题来自这条线。因此,当将此行更改为“self.networkList = nil;”时它正在工作,它不会给仪器带来任何内存泄漏。我的错误在哪里?请救救我。
  • Rob 你说对了,当我检查了所有我的代码时,我发现我的项目中的问题出在哪里。我当然可以肯定,有时 Instruments 会显示不同的问题源位置。我觉得每个人都要小心。谢谢
【解决方案2】:

有一种工具比 Instruments 更容易使用。该工具是 Clang 静态分析器。 The website describes如何安装和使用工具集。它非常易于使用且非常高效。我一直在使用它。

命令是:

xcodebuild clean
scan-build -k -V xcodebuild

它真的很容易使用,因为结果会出现在网络浏览器中!它将捕获 Instruments 无法捕获的泄漏。这是 Apple 在 Snow Leopard 中集成的工具…… Leopard 中也可以使用。查看the website for directions..

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多