4

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

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

我曾尝试发布 numberForArray,但在选择器视图中显示最后一行时应用程序崩溃。

所有想法表示赞赏!

替代文字

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

4

2 回答 2

3

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

numberForArray分配了 的结果-NSString stringWithFormat:,这是一个自动释放的对象。这意味着您不想释放它(正如您所发现的那样)。

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

但是等等,还有更多:firstComponentRange是通过glucoseLoader使用创建的-NSArray initWithArray:。当您这样做时,源数组的所有元素都将添加到目标,目标将再次保留它们。

那么,您何时/如何发布firstComponentRange

于 2010-05-31T03:42:58.647 回答
0

Instruments 告诉您 firstComponentRange 没有被释放(一个小泄漏)。由于数组保留了它的内容,因此您也吃了 100 个 NSString 实例,分配在用较暗带指示的行处(更严重的泄漏)。

于 2010-05-31T04:13:06.967 回答