我讨厌记忆泄漏而且通常为自己感到骄傲,等等,等等等等。救命啊!
我所拥有的泄漏并不是很大(最多几K),但我想要将它们删除。有两类泄漏,我从Instrument's Leaks工具中获得了一些屏幕截图。
第一个是在运行我的应用程序的10秒内发生的奇怪的Java / Web事情:无论我采取什么代码分支。这就像是背景中正在发生的事情。我有一些来自备受推崇的iPhone编程作者的示例代码,他们做了同样的事情,所以我并不担心我在app运行期间丢失的64个字节。在我创建任何基于Web的表单(例如反向地理编码器之类的MapKit工具)之前很久就会发生此泄漏...但我稍后会在我的代码中使用它们。
然而,第二个是阴险的,我感觉自己是一个傻瓜,因为无法追踪它...因为它的发生是如此简单。我所做的只是在Interface Builder中创建一个UITextField,并像以前一样使用它。当iPhone弹出虚拟键盘时,它会在我创建的任何UITextField上发生。并且,内存泄漏非常大(一次数百个字节);大概来自创建屏幕按钮的图形。
因此,要明确的是,当我触摸任何这些文本字段时,虚拟键盘弹出,我泄漏了几百(或更多)字节。我甚至没有输入任何内容,分配任何变量等。顺便说一句,它只发生在每个文本字段第一次弹出虚拟键盘时。 (所以我的泄漏“有点受到限制。”)(这就是他们对最近的一口油井说的话,嗯?)
您将会询问拥有这些UITextField的控制器有何不同之处。好吧,我唯一能想到的是它是一个动态创建的UIViewController,由UINavigationController管理。
因为在这两种情况下,我的代码永远不会出现在堆栈上,所以我不确定我的下一步应该是什么。我已经运行了新的XCode静态分析仪,虽然它报告了几个警告,但它们是良性的红色鲱鱼。
所以,我正在寻找关于我的下一步应该是什么的建议。 (我已经开始评论代码,进行备份等过程。)
附带泄漏工具的屏幕截图。
看起来我只能包含一个链接,直到我得到一些代表点。我将展示后者的泄漏。
Memleak 2屏幕截图: link text
-Pete
P.S。我正在使用最新的Xcode(3.2.3)以及最新的4.0.2 iOS。
答案 0 :(得分:2)
乐器的新手倾向于只看漂亮的图表并且往往会被它误导。你应该注意数字而不是图表。
根据your screenshot,这些是你正在使用的库的内存泄漏。值得注意的是这些框架:
由于框架导致了这些泄漏,除非你有源代码,否则你无能为力。
根据你的截图:
泄漏的内存总量: 240字节( 0.23 kb )。
甚至没有一个千字节,所以我不会失去任何睡眠:P