我正在寻找iPhone应用中的内存泄漏。我正在使用Instruments来追踪导致泄漏的代码(变得越来越成为仪器的朋友!)。现在仪器显示两条线:一条是深蓝色(第146行),另一条是浅蓝色(150)。从一些试验和错误中我得知他们以某种方式连接,但在Objective-C和内存管理方面还不够好,但还没有真正理解如何。
有谁知道为什么使用不同的颜色以及可能是我的问题?
我试图释放numberForArray,但是当在选择器视图中显示最后一行时应用程序崩溃。
所有想法都赞赏!
alt text http://img338.imageshack.us/img338/2323/instrumentscolors.jpg
(发布这个我也意识到第139行是多余的!在那里,已经有了改进;-)
答案 0 :(得分:3)
好的,让我们来看看这段代码的对象分配/所有权行为......
numberForArray
被赋予-NSString stringWithFormat:
的结果,这是一个自动释放的对象。这意味着您不想要发布它(如您所发现的那样)。
然后将该对象添加到glucoseLoader
NSMutableArray,它将retain
。循环100次,创建100个对象并将其添加到glucoseLoader
。当释放glucoseLoader
时,在第154行,它还将释放添加到其中的所有对象。
但是等等,还有更多:firstComponentRange
是使用glucoseLoader
从-NSArray initWithArray:
创建的。执行此操作时,源数组的所有元素都将添加到目标,这将再次保留它们。
那么,何时/如何发布firstComponentRange
?
答案 1 :(得分:0)
仪器告诉你firstComponentRange没有被释放(一个小的泄漏)。由于数组保留了其内容,因此您也会泄漏100个NSString实例,这些实例分配在带有较暗波段(更严重的泄漏)的行上。