iOS 8的UIWebView内存pipe理

我有一个层次结构的应用程序(NavigationController),在根控制器的angular色中有一个简单的表视图。 每次select任何单元格时,都会得到一个新的视图,其中包含有关细节的一些信息(由DetailViewControllerpipe理)。 在DetailViewController的视图方面,我有一个UIWebView来显示来自Internet的数据。 但是,当我查看内存使用情况时会发生问题。 DetailViewController的每个新打开的视图,通过UiWebView从Web上加载的内容带来更多的内存使用系数。 我想卸载一切,并释放为该数据分配的内存,当我回到我的根控制器的视图。

我如何处理这个问题? 我试图stopLoading: UIWebView的实例方法来保存一些内存,但它也不能解决问题。 以及我不完全了解ARC的工作过程,我不能保证自己,如果通常每增加一个新的详细视图,增加内存使用系数。

先谢谢你!

有几件事要注意。 UIWebView “泄漏”。 至lessiOS4以来一直在泄漏。 随着每一个大的页面加载,它似乎增长,并且当UIWebView对象本身被释放时,内存不被充分地补充。 无论这个内存是否保留在caching中,在真正需要的时候被释放,还是泄漏,我都无法正确回答。 这些年来有所改善,但仍然可以使用仪器的内存分配图。

让我们从基础开始。 在开始对devise进行更改之前,请尝试使用“乐器”来查看到底发生了什么。 您也可以inheritance您的视图和视图控制器,实现它们的dealloc方法,并确保它们在预期的情况下被正确释放。 很多时候,特别是涉及块的时候,人们会创build保留周期,导致巨大的内存泄漏。 先这样做。

以下是我使用WebKit的一些经验:

  • 尽可能重用Web视图。 如果可以,请使用相同的对象,并将其作为视图控制器视图的子视图添加。
  • 我们注意到,我们可以从Web视图中排除最多的是在释放UIWebView对象之前打开一个空白页面。
  • iOS8支持使用WebKit的新模型: WKWebView (WebKit2)。 在这个模型中,networking内容被pipe理和脱离进程,内存在这个过程中被“泄漏”。 当需要时,操作系统将会终止这些WebKit进程,从而允许您的应用程序运行。 你可以试试看看你有没有改进。