使用仪器进行XCode内存泄漏检查?

时间:2011-04-10 09:41:58

标签: iphone objective-c memory memory-leaks instruments

美好的一天,

我完全没有检查内存泄漏的经验,所以任何帮助都会很好。

我刚完成了iPhone应用程序的大部分工作,现在我想弄清楚为什么它会在几次运行后停止工作。在Leaks和Allocations模式下使用Instruments我可以看到有两个对象很快堆积内存而不释放: enter image description here

我不是百分之百确定发生这种情况的原因或原因,但当我点击UIDeviceRGBColor右侧的箭头时,责任来电者被声明为

[UIColor allocWithZone];

我在UIColor的项目中进行了搜索并找到了这个(注意_colorThreshold):

enter image description here

我认为我的问题与_colorThreshold有关,而这似乎没有被释放:

enter image description here

我尝试将autorelease添加到他们的初始化参数中,但这导致应用程序崩溃。这里有什么建议吗?


编辑1

以下是LevelMeter.h enter image description here

的截屏

1 个答案:

答案 0 :(得分:2)

以上有几个问题:

  • LevelMeterColorThreshold是Objective-C类吗?
  • 如果是这样,为什么使用malloc而不是通常的alloc / init?
  • 当您粘贴搜索结果的屏幕截图时,我们无法看到周围的代码,因为只会显示带有搜索匹配的行。

Leaks仪器是否报告泄漏,或者您只是分配不必要的内存? 这两种情况有所不同:

  1. 如果您松散对象的引用,则会发生泄漏,以便您以后无法向其发送release消息。
  2. 在不释放/释放它们的情况下实例化不再需要的对象
  3. 泄漏只能检测到第一种情况 泄漏样本:

    NSMutableString* test = [[NSMutableString alloc] initWithString:@"1"];
    NSLog(@"%@", test);
    NSMutableString* anotherTest = [[NSMutableString alloc] initWithString:@"2"];
    test = anotherTest; //here we loose reference to the original object
    NSLog(@"%@", test);
    

    通过指定anotherTest进行测试,我们丢失了指向包含@“1”的内存地址的引用。