如何解决 (IOS)UIWebview 内存泄漏
来源:互联网 发布:淘宝客服每日工作小结 编辑:程序博客网 时间:2024/05/10 16:35
哈哈,其实详细的代码已经给了出来:http://blog.csdn.net/yeshennet/article/details/52413517
这里补一点当时出现的情况吧:
一开始是测试说手机用久了以后会卡,还有就是会闪退,会黑屏,出现一些奇奇怪怪的毛病。问题很严重,而且是用久了以后,听描述是偶发的。后来我用xcode中的工具查看了一下内存,如下图:
每打开一个页面就会出现增加一点内存,退出也不会消失。是内存泄漏无疑了。
上网找了一下资料,都是什么“苹果官方都承认的内存泄漏。而且苹果也心虚了,给了一个WKWebview用来替代UIWebView”
所以解决的第一个步骤就是无缝切换到wkwebview:
我动手封装了一下,识别了一下IOS的版本,IOS8+的就切换到wkwebview。
没想到这么一切换,出了问题。(切换wkwebview的注意点)“AController中的wkwebview” 和 “BController中的wkwebview”的localstorage信息不一致。
什么意思呢,就是在B中保存了数据,回到A中,数据没同步到。
貌似真的无解.....
只能一个个API查看(怎么查看?https://developer.apple.com/reference/webkit/wkwebview)
后来发现一个东西有点可疑wkwebviewconfiguration。(https://developer.apple.com/reference/webkit/wkwebviewconfiguration)
其中有一个值,processPool,描述是:The process pool from which to obtain the view’s Web Content process.
再搜了一下,stackoverflow上有关于的cookie的问答刚好和这个有关,处理方法是将config中的processPool变为单例。
然后我也弄成单例,然后问题就解决了。
然后IOS7怎么办?
解决的第二个步骤是检查是否存在循环引用。
哈哈,我也是切换过去才知道原来内存泄漏是有解的。
最初也是试了一轮网上的方案,然后都没什么用。
就在我尽人事听天命的时候,我在controller退出的时候,手动置空了所有引用。在页面返回的时候强制清了一轮缓存
NSUserDefaults.standardUserDefaults().setInteger(0, forKey: "WebKitCacheModelPreferenceKey")NSUserDefaults.standardUserDefaults().synchronize()然后再去看内存,还是会增长,不过已经平和了很多,页面返回内存也会降低回去。
是什么原理呢?
我猜是controller中有uiwebview的强引用。
uiwebview中也保留的controller的回调入口。
然后这两个东西就循环引用了,就没被回收。
以上。
- 如何解决 (IOS)UIWebview 内存泄漏
- 解决iOS内存泄漏
- UIWebview 多线程 内存泄漏
- 如何解决IE内存泄漏
- 内存泄漏问题如何解决
- 如何解决afnetworking内存泄漏
- iOS 调试解决iOS内存泄漏
- 如何解决内存溢出以及内存泄漏
- UIWebView内存泄漏解决办法(一)
- UIWebView内存泄漏解决办法(二)
- 05 - UIWebView 内存泄漏问题
- 内存泄漏的问题如何解决(linux)
- 内存泄漏的问题如何解决(linux)
- iOS NSString 内存泄漏 , 求解决
- 一步步调试解决iOS内存泄漏
- 一步步调试解决iOS内存泄漏
- 一步步调试解决iOS内存泄漏
- 一步步调试解决iOS内存泄漏
- 引用API返回Json数据的问题
- nyoj 118 修路方案
- Spring的Bean之Bean的基本概念
- java 异常知识点总结 error exception throw throws
- 好未来(已拿offer)+ CVTE(3面通过)
- 如何解决 (IOS)UIWebview 内存泄漏
- TCP应用层
- LG的数学计划之素数测试(Miller Rabin算法)
- 装饰器模式
- android sqlite详解
- pcb布线规范
- Linux_搭建Samba服务_进行文件的传输(简单版)
- Vim编辑器简介及快速上手
- 《C++高效编程:内存与性能优化》第九章:高效内存管理