最近我在修复一个人的代码。有一个大类无法释放。你需要用5到6个releases才能让它dealloc。
我仔细查看了这个大类,最终找到了需要释放的各种东西。
这让我想到:一定有一种非常简单的方法可以“找到”对象上的所有retains……对吗?
那么,有没有简单的方法“找到对象上的所有retains”?XCode或Instruments中是否有每个人都知道的按钮?
如果找不到像这样的神秘保留,你会怎么做?
所以,在iOS世界中,如果有人知道“显示此对象所有保留来源”的按钮——谢谢!
P.S.请注意,这里没有泄漏,这个问题与泄漏完全无关。该对象只是“完全正确”地不会释放。
后来……
Fabio提供的真正惊人的解决方案:
Fabio为这个问题提供了一个惊人的解决方案。 说出九个单词就行了:
-(id)retain
{
NSLog(@"%@", [NSThread callStackSymbols]);
return ([super retain]);
}
这在很多情况下都非常有用,并且会引导出许多其他有用的东西。Fabio,你可能每年会永远为我节省两个人周的工作时间。谢谢!
顺便说一句,如果你刚刚开始学习并且对输出感到困惑,我发现通常会有许多包含“UINib instantiateWithOwner:”的块。看起来这些将首先出现,然后是重要的块。
CADisplayLink
会保留对象。文档也是这么说的:“新构建的显示链接会保留目标。” 要让保留消失,您需要使CADisplayLink
失效。 - Dave DeLong