为什么UIWebView不能释放所有内存?

7
我有一个图形密集型的iPad应用程序,其中包含一个UIWebView。使用模拟器(iOS 4.2.1),我可以看到随着浏览的增加,实际内存会增加相当多。当我关闭UIWebView并释放它时,它所使用的一些内存被释放了,但并不是全部。这很烦人。也许它并没有立即被释放,没关系。但是,当出现内存警告时,我希望系统能够进行一些清理。然而,如果我四处浏览,然后关闭UIWebView(并释放它),然后在模拟器中触发内存警告,实际内存不会改变!这是怎么回事?
那么为什么会这样呢?为什么UIWebView不能更好地将内存释放回系统?为什么它似乎不响应内存警告?我错过了什么吗?

2
活动监视器在调试目的上是无用的。请使用分配工具。请注意,模拟器的行为可能与设备上的应用程序有显着不同之处。 - bbum
哦,有趣。玩弄分配(有趣的是我以前从未注意过,因为过去一直专注于修复泄漏),只需几分钟的使用,我就能将总字节数提高到256MB。虽然实时字节只有4-7MB。总字节是累积的吗?我需要找一个快速的教程... - theory
哦,在TFM中找到了:“总的来说:已经分配了该类型的对象或内存块的总数,包括已释放的。”太棒了!我的应用程序实际上没有使用太多内存! - theory
1个回答

6

由于似乎有所帮助,因此将其作为答案添加:

活动监视器在调试过程中无用。使用分配工具。请注意,模拟器的行为可能与设备上的应用程序显着不同。

很高兴能够帮忙。我经常发现打开“仅跟踪活动分配”对于观察应用程序的持续工作集非常有帮助。跟踪存活/死亡也很有用。

哦,堆快照分析(我博客上的文章)可以极大地帮助您跟踪内存泄漏。

泄漏?从不使用它。堆快照分析完全取代了它。您的结果可能会有所不同。


谢谢bbum,我会去看看! - theory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接