在追踪内存泄漏时仪器中的颜色

时间:2010-05-31 02:16:34

标签: objective-c xcode memory-leaks instruments

我正在寻找iPhone应用中的内存泄漏。我正在使用Instruments来追踪导致泄漏的代码(变得越来越成为仪器的朋友!)。现在仪器显示两条线:一条是深蓝色(第146行),另一条是浅蓝色(150)。从一些试验和错误中我得知他们以某种方式连接,但在Objective-C和内存管理方面还不够好,但还没有真正理解如何。

有谁知道为什么使用不同的颜色以及可能是我的问题?

我试图释放numberForArray,但是当在选择器视图中显示最后一行时应用程序崩溃。

所有想法都赞赏!

alt text http://img338.imageshack.us/img338/2323/instrumentscolors.jpg

(发布这个我也意识到第139行是多余的!在那里,已经有了改进;-)

2 个答案:

答案 0 :(得分:3)

好的,让我们来看看这段代码的对象分配/所有权行为......

numberForArray被赋予-NSString stringWithFormat:的结果,这是一个自动释放的对象。这意味着您想要发布它(如您所发现的那样)。

然后将该对象添加到glucoseLoader NSMutableArray,它将retain。循环100次,创建100个对象并将其添加到glucoseLoader。当释放glucoseLoader时,在第154行,它还将释放添加到其中的所有对象。

但是等等,还有更多:firstComponentRange是使用glucoseLoader-NSArray initWithArray:创建的。执行此操作时,源数组的所有元素都将添加到目标,这将再次保留它们。

那么,何时/如何发布firstComponentRange

答案 1 :(得分:0)

仪器告诉你firstComponentRange没有被释放(一个小的泄漏)。由于数组保留了其内容,因此您也会泄漏100个NSString实例,这些实例分配在带有较暗波段(更严重的泄漏)的行上。