在app的内容页(详情页)中,富文本的显示一直是常常须要处理的问题,而一般在后端的富文本编辑中,Html应用比较广泛,因此其实须要处理的Html富文本显示的问题,如下这三种方式确定不是最优的显示Html富文本的方式,只是相对简单的解决方案,对先后端的转换要求少,能够快速集成。web
如下对这3种方式进行内存的测试对比,毕竟详情页是相对比较大,并且打开频率高的页面,因此内存占用是必需要考虑的问题。后端
基本环境:
- Objective-C
- Xcode 6.4
- Deployment Target IOS 8.0
- DTCoreText 版本:1.6.16
说明:
- DTCoreText:第三方富文本显示组件,支持Html转换为 NSAttributedString;
- WKWebView:IOS 的WebKit框架的浏览器组件,从IOS 8.0 开始支持;
- UIWebView:IOS 的UIKit框架的浏览器组件,从IOS 2.0 开始支持;
测试方法:
- 使用3个组件分别显示一个web页面的内容(例如:http://news.dayoo.com/guangzhou/201512/11/139995_45489706.htm);
- 页面加载完后,清空内容,再次加载内容,重复3次;
- 比较3个组件所占用的内存状况;
内存调试工具:Instruments
测试结果:
DTCoreText

WKWebView

UIWebView

运行期的内存占用: DTCoreText < WKWebView < UIWebView
运行结束后的内存占用:WKWebView < DTCoreText < UIWebView浏览器
UIWebView一直被人诟病的内存占用问题依旧没有解决,若是须要打开的Html页面比较复杂(尤为是有很多js的)仍是慎用吧,新的WKWebView 确实比UIWebView 在内存管理上作得更好,若是app能够抛弃IOS 7 或如下版本,值得使用,至少在内存占用上已经跟 原生的NSAttributedString 差距没那么大了,在IOS设备内存和性能更高的状况下,差距会更小,而纯Html 页面灵活度会更高。app
以前在使用UIWebView的时候,试过各类释放内存的方法,包括设置 NSURLCache,清空NSURLCache 等方法,但实际做用都不大,因此在测试中并无使用这些方式,只是使用 [_webContent loadHTMLString:nil baseURL:nil]; 进行清空内容;框架