2

在我的 iPad 应用程序的 iOS 4.2.1 上的 UIScrollViewDelegate 类中,该-scrollViewDidEndDecelerating:方法调用了另一个方法,它是:

EntryModel *entry = [entries objectAtIndex:index];
self.titleLabel.text = entry.title;

title是 EntryModel 的一个非原子的、保留的 NSString 属性。titleLabel是一个非原子的保留属性,带有一个 IBOutlet 将它连接到一个 nib 中定义的 UILabel。在 bbum 的博文之后,我一直在使用 Heapshot 分析,并将上述代码识别为泄漏。几乎每次我滚动到新页面时,都会titleLabel泄漏一点:

替代文字

如果我将第二行更改为:

self.titleLabel.text = @"Whatever";

泄漏停止:

替代文字

我很困惑。-[UILabel text]在分配新值之前不释放旧值吗?我假设不是,我一定做错了什么。为什么会泄漏?

4

2 回答 2

1

也许您实际上并没有泄漏内存。您正在分配内存,因为 UILabel 上的 text 属性使用复制语义。因此,调用self.titleLabel.text将在赋值的右侧创建 NSString 的副本。尝试使用 Leaks 工具运行以查看是否存在内存泄漏。

于 2011-01-12T18:54:42.253 回答
0

鉴于您有零分配的 heapshot 代,它不是一致的内存增加。它可能是缓存 [出错] 或者可能是与滚动相关的泄漏,一些东西从事件的裂缝中掉了下来。

带有分配的 heapshot 迭代显示了什么?

于 2011-01-13T18:02:35.693 回答