为什么` - [UILabel setText:]`泄漏?

时间:2011-01-12 18:38:56

标签: cocoa-touch memory-leaks uilabel uiscrollviewdelegate

在我的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 blog post之后,我一直在使用快照分析并将上述代码识别为泄漏。几乎每次我滚动到新页面时,titleLabel都会泄漏一点:

alt text

如果我将第二行更改为:

self.titleLabel.text = @"Whatever";

泄漏停止:

alt text

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

鉴于您拥有零分配的快照生成,它不是一致的内存增加。它可能是缓存[出错]或者它可能是与滚动相关的泄漏,这些事件会在事件中出现问题。

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