2011-04-10 97 views
2

美好的一天,在XCode中使用仪器进行内存泄漏检查?

我完全没有经验检查内存泄漏,所以任何帮助这将是伟大的。

我刚刚完成了我的iPhone应用程序的大部分工作,我现在试图弄清楚为什么在几次运行后停止工作。在泄漏和分配模式下使用仪器,我可以看到有一些是相当迅速堆放内存两个对象,而不是释放: enter image description here

我不是一个肯定百分之百哪里或为什么发生这种情况,但是当我点击

enter image description here

:上箭头UIDeviceRGBColor的权

[UIColor allocWithZone]; 

我也通过我的项目的UIColor搜索和想出了这个(注意_colorThreshold的)的负责来电陈述

我相信我的问题已经做_colorThreshold这似乎并没有被得到释放:

enter image description here

我试着将自动释放自己的初始化参数,但所做的应用程序崩溃。有什么建议吗?


编辑1

这里是LevelMeter.h enter image description here屏幕截图

+0

不是一个直接的答案,但[这个来自iDeveloper.tv的视频](http://www.ideveloper.tv/freevideo/details?index=17012088)有一些关于objective-c中内存管理的重要指导规则,这可能会帮助你未来的项目。 – NKCSS 2011-04-10 09:47:59

回答

2

有几个问题与上面:

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

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

  1. 的泄漏发生,如果你松引用对象,这样就可以不稍后发送一个release消息。
  2. 实例化对象,不再需要的不释放/解放出来

泄漏只能检测尚属首例。
样品的泄漏:

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”的内存地址的引用。

+0

感谢您的反馈!如果是Objective-C类(Objective-C对象允许使用结构体),我是初学者编码器,所以不是%100。我已经发布了LevelMeter的.h文件。这是否澄清了我的问题可能是什么?再次感谢。 – 2011-04-10 10:31:03

+0

我发现我的问题的来源。感谢您将所有内容都放在了角度! – 2011-04-10 10:41:49