Cocoa touch 为什么“-[UILabel setText:]”会泄漏?

Cocoa touch 为什么“-[UILabel setText:]”会泄漏?,cocoa-touch,memory-leaks,uilabel,uiscrollviewdelegate,Cocoa Touch,Memory Leaks,Uilabel,Uiscrollviewdelegate,在我的iPad应用程序iOS 4.2.1上的UIScrollViewDelegate类中,-ScrollViewDiEndDecreating:方法调用另一个方法,该方法执行以下操作: EntryModel *entry = [entries objectAtIndex:index]; self.titleLabel.text = entry.title; title是EntryModel的非原子保留NSString属性titleLabel是一个非原子的保留属性,IBOutlet将其连接到ni

在我的iPad应用程序iOS 4.2.1上的UIScrollViewDelegate类中,
-ScrollViewDiEndDecreating:
方法调用另一个方法,该方法执行以下操作:

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]
是否在分配新值之前不释放旧值?我想不是,我一定是做错了什么。为什么会泄漏?

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

鉴于你有零分配的heapshot代,这不是一个一致的内存累积。它可能是缓存出了问题,也可能是与滚动相关的泄漏,一些东西从事件的裂缝中掉落


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

Leaks并不认为这是一个漏洞,但显然是。我知道
titleable.text
将在分配时创建NSString的副本;但是,当一个新的值被分配给它(并被复制)时,为什么它不释放它呢?如果Leaks不认为它是泄漏,为什么你认为它是泄漏?如果
titleLable.text
未正确释放字符串,则泄漏将称之为泄漏。如果地址仍然可以访问,则泄漏不会称之为泄漏。它仍然可以到达并不意味着它也不是一个漏洞;废弃的内存是一个巨大的问题(比如只写缓存等)。看:很多东西。CGPATH,
s中包含各种内容。可能是缓存累积。可能是真正的泄密。提交一个bug。