我有一个层次化应用程序(NavigationController),在根控制器的角色中有一个简单的表视图。每次选择任何单元格时,您都会得到一个新的视图,其中包含一些关于细节的信息(由DetailViewController管理)。在DetailViewController的视图方面,我有一个UIWebView来显示来自互联网的数据。但是当我看到内存的使用情况时,问题就会发生。DetailViewController的每一个新的开放视图,其内容通过UiWebView从web加载,都会带来更多的内存使用系数。当我回到根控制器的视图时,我想卸载所有并释放分配给该数据的内存。
我该如何处理这个问题?我试图使用stopLoading: UIWebView的实例方法来节省一些内存,但它也解决不了这个问题。此外,我也不完全理解ARC的工作过程,如果正常情况下使用系数增加内存和每个新打开的细节视图,我无法保证自己。
提前谢谢你!
发布于 2014-09-27 11:42:19
有几件事要注意。UIWebView“泄漏”。至少从iOS4开始它就一直在泄漏。随着每一次大的页面加载,它似乎都在增长,当UIWebView对象本身被释放时,内存并没有得到充分的补充。无论这个内存是否保存在缓存中,在真正需要时释放,还是泄漏,我都无法正确回答。这些年来,这种情况有所改善,但仍然可以从仪器的内存分配图中看出这一点。
让我们从基础开始。在您开始对您的设计进行更改之前,请尝试使用“仪器”来查看到底泄漏了什么。您还可以子类视图和视图控制器,实现它们的dealloc方法,并确保它们在预期时被正确释放。很多时候,特别是当涉及到块时,人们会创建保留周期,这会导致巨大的内存泄漏。先做这个。
下面是我使用WebKit的经验中的一些建议:
UIWebView对象之前打开一个空白页。WKWebView (WebKit2)的新模型。在该模型中,web内容被管理和提取-进程,内存在该过程中被“泄漏”。当需要时,操作系统将终止这些WebKit进程,从而允许您的应用程序运行。你可以试试这个,看看你是否有改进。https://stackoverflow.com/questions/26074055
复制相似问题