首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 8 UIWebView内存管理

iOS 8 UIWebView内存管理
EN

Stack Overflow用户
提问于 2014-09-27 11:15:48
回答 1查看 3.7K关注 0票数 6

我有一个层次化应用程序(NavigationController),在根控制器的角色中有一个简单的表视图。每次选择任何单元格时,您都会得到一个新的视图,其中包含一些关于细节的信息(由DetailViewController管理)。在DetailViewController的视图方面,我有一个UIWebView来显示来自互联网的数据。但是当我看到内存的使用情况时,问题就会发生。DetailViewController的每一个新的开放视图,其内容通过UiWebView从web加载,都会带来更多的内存使用系数。当我回到根控制器的视图时,我想卸载所有并释放分配给该数据的内存。

我该如何处理这个问题?我试图使用stopLoading: UIWebView的实例方法来节省一些内存,但它也解决不了这个问题。此外,我也不完全理解ARC的工作过程,如果正常情况下使用系数增加内存和每个新打开的细节视图,我无法保证自己。

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-27 11:42:19

有几件事要注意。UIWebView“泄漏”。至少从iOS4开始它就一直在泄漏。随着每一次大的页面加载,它似乎都在增长,当UIWebView对象本身被释放时,内存并没有得到充分的补充。无论这个内存是否保存在缓存中,在真正需要时释放,还是泄漏,我都无法正确回答。这些年来,这种情况有所改善,但仍然可以从仪器的内存分配图中看出这一点。

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

下面是我使用WebKit的经验中的一些建议:

  • 尽可能地重用web视图。如果可以,可以使用相同的对象,只需将其添加为视图控制器视图的子视图。
  • 我们注意到,我们可以从web视图中提取的最大功能是在释放UIWebView对象之前打开一个空白页。
  • iOS8支持使用WebKit:WKWebView (WebKit2)的新模型。在该模型中,web内容被管理和提取-进程,内存在该过程中被“泄漏”。当需要时,操作系统将终止这些WebKit进程,从而允许您的应用程序运行。你可以试试这个,看看你是否有改进。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26074055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档