在app的内容页(详情页)中,富文本的显示一直是经常需要处理的问题,而通常在后端的富文本编辑中,html应用比较普遍,所以其实需要处理的html富文本显示的问题,以下这三种方式肯定不是最优的显示html富文本的方式,只是相对简单的解决方案,对前后端的转换要求少,可以快速集成。
以下对这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
uiwebview一直被人诟病的内存占用问题依旧没有解决,如果需要打开的html页面比较复杂(尤其是有不少js的)还是慎用吧,新的wkwebview 确实比uiwebview 在内存管理上做得更好,如果app可以抛弃ios 7 或以下版本,值得使用,至少在内存占用上已经跟 原生的nsattributedstring 差距没那么大了,在ios设备内存和性能更高的情况下,差距会更小,而纯html 页面灵活度会更高。
之前在使用uiwebview的时候,试过各种释放内存的方法,包括设置 nsurlcache,清空nsurlcache 等方法,但实际作用都不大,所以在测试中并没有使用这些方式,只是使用 [_webcontent loadhtmlstring:nil baseurl:nil]; 进行清空内容;