【问题标题】:Memory leaks in apple frameworks苹果框架中的内存泄漏
【发布时间】:2011-10-03 20:36:19
【问题描述】:

当我发布我的课程时,我收到了 NSStrings 的泄漏。但我的属性中只有 2 个 NSString。我在这个类的方法中使用的其他 NSString,我在退出方法之前释放它们。

[somestring release],somestring = nil;

这是截图

是我的问题吗?或者这个泄漏属于苹果框架?我也在课堂上使用 ASIHTTPRequest。

编辑:我发现了问题。我用了几次 NSMutableArray 和 mutableCopy 方法,没有自动释放。

之前和有泄漏:someMutableArray = [anotherClass.anotherMutableArray mutableCopy];

之后,并且没有泄漏:someMutableArray = [[anotherClass.anotherMutableArray mutableCopy]autoreleasing];

【问题讨论】:

    标签: iphone objective-c ios memory-management memory-leaks


    【解决方案1】:

    Apple 的框架可能没有泄露。

    如果您将该变量传递给另一个对象并且该其他对象 保留它而不释放,您将看到泄漏。它似乎是您分配字符串的位置,而不是第二个对象。

    内存泄漏是我放弃 ASIHTTPRequest 的原因。我知道它来自 ASIHTTPRequest,但无法找出它来自哪里。

    在这种情况下,您可以做的最好的事情可能是查看其中一个泄露块的块历史记录。您将看到各种保留和发布。他们应该平衡;此外,每个保留都应该有一个释放它的对应物。例如,如果您在对象设置器中看到一个对象的保留,您应该验证前一个对象在该设置器中已释放,并且在 dealloc 中存在释放。尝试识别正在泄漏的最高级别对象,因为其他泄漏可能是它的成员变量。

    【讨论】:

      【解决方案2】:

      在 Instruments 中,左侧有一个名为 Call Tree 的部分。当您选中隐藏系统库时,只会显示您的方法调用。你应该试试这个,看看你自己的代码是否与泄漏有关。

      【讨论】:

      • @TimurMustafaev 很可能它也不是 SBJson,而是您的代码保留然后不释放您从 SBJson 框架获得的对象。
      【解决方案3】:

      你需要释放dealloc方法中的变量。

      【讨论】:

      • 然后确保为属性而不是变量赋值。使用 self.somestring = "value" 而不是 somestring = "value"。
      猜你喜欢
      • 2010-12-04
      • 2014-01-06
      • 2011-05-29
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多