【问题标题】:Instruments not able to find a memory leak仪器无法找到内存泄漏
【发布时间】:2011-12-06 05:44:25
【问题描述】:

我有这个使用配置文件选项运行的测试代码。 但我看不到任何泄漏

我已经注入了泄漏,但不确定为什么仪器没有显示泄漏

NSMutableArray* test_leak2()
{
    int i=0;
    NSMutableArray *arr = [[NSMutableArray alloc] init ];

    while(i <100) {
    NSImage *img = [[NSImage alloc] init ];
        [arr addObject:img];
        i++;
    }
    return arr;
}

int main(int argc, char *argv[])
{
    NSMutableArray *arr = test_leak2();
    return 0;
}

【问题讨论】:

  • 除非您使用自动引用计数 (ARC),否则您应该会看到分配增加,静态分析器会告诉您什么?
  • 您创建的项目是否启用了 ARC?如果是这样,ARC 会自动插入胶水代码,这意味着没有泄漏。检查自动保留计数的项目设置。这也许就是“问题”。如果您没有启用 ARC,请在 main.js 中添加一些 CPU 松弛。 Instruments 不是实时收集数据,而是在时间间隔(如秒)之后获取数据。在 return 0 之前插入“sleep(10)”。也许你会看到泄漏。
  • 添加睡眠工程,谢谢!!!

标签: objective-c xcode4 instruments memory-leaks xcode-instruments


【解决方案1】:

如果您使用 ARC,则没有泄漏,ARC 会“在幕后”处理保留/释放。

泄漏工具并非万无一失,它是一个好的开始。

静态分析器的第一道防线,运行它并修复所有警告。

并非所有的内存丢失都是泄漏,只是没有指针的泄漏。试试 Heapshot Analysis,bbum 有一个很棒的 tutorial here。我已经多次使用 Heapshot 获得了很大的优势,非常感谢 bum。

【讨论】:

    猜你喜欢
    • 2012-07-06
    • 2011-02-15
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多