【问题标题】:iOS memory leak with dictionaryiOS内存泄漏与字典
【发布时间】:2011-08-25 13:18:44
【问题描述】:

我目前正在分析我的应用程序并遇到一些泄漏。我已经尝试在我认为需要它们的地方释放对象。每个版本都会使应用崩溃。

这是我认为是罪魁祸首的一句话:

NSDictionary *dicUserData = [NSDictionary dictionaryWithObject:self forKey:@"chapter"];

只是想知道处理这个问题的最佳方法。我也遇到了其他类似的泄漏问题。值得注意的是 self 是一个自定义类 [Dal_Chapter]。

我是否需要实现复制或其他东西,在上面的行中调用它并对其进行自动释放?

提前致谢。

【问题讨论】:

  • 在启用僵尸的情况下分析您的代码。
  • 你也可以只调用 [self retain] 而不是 [self copy],但这是非常错误的。
  • 您是如何发现泄漏的?
  • 我还没有解决这个问题。我把它放在一边几天,因为我还有其他一些东西要看。当我有更多时间时,我会在这里发布并尝试获得正确的答案。干杯!

标签: objective-c ios ipad memory-leaks nsdictionary


【解决方案1】:

使用dictionaryWithObject 等便捷方法可提供字典对象的自动释放实例。除非您将其保留在其他地方,否则这不是您的泄漏所在。

【讨论】:

    【解决方案2】:

    我会检查一下静态分析器,它应该能够为您指出您的泄漏。

    那本字典会保留 self 所以你不必担心它。

    是自己释放的主人吗?

    【讨论】:

      【解决方案3】:

      基本上你不必对字典做任何事情,但如果你想控制内存,你需要这样做:

      NSDictionary *dicUserData = [[NSDictionary alloc] initWithObjects:yourObject forKeys:key];
      

      和 int 你的 dealloc 方法,

      [dicUserDate release];
      

      但通常你无事可做......你确定你的泄漏来自你的字典吗?

      【讨论】:

        【解决方案4】:

        始终在 dealloc 方法中释放所有变量。是不是在适当的地方它可能会崩溃。检查这个链接click here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-18
          • 1970-01-01
          • 1970-01-01
          • 2012-10-24
          • 1970-01-01
          相关资源
          最近更新 更多