在app的內(nèi)容頁(詳情頁)中德召,富文本的顯示一直是經(jīng)常需要處理的問題白魂,而通常在后端的富文本編輯中,Html應用比較普遍上岗,所以其實需要處理的Html富文本顯示的問題福荸,以下這三種方式肯定不是最優(yōu)的顯示Html富文本的方式,只是相對簡單的解決方案肴掷,對前后端的轉(zhuǎn)換要求少敬锐,可以快速集成。
以下對這3種方式進行內(nèi)存的測試對比呆瞻,畢竟詳情頁是相對比較大台夺,而且打開頻率高的頁面,所以內(nèi)存占用是必須要考慮的問題痴脾。
基本環(huán)境:
- Objective-C
- Xcode 6.4
- Deployment Target IOS 8.0
- DTCoreText 版本:1.6.16
說明:
- DTCoreText:第三方富文本顯示組件颤介,支持Html轉(zhuǎn)換為 NSAttributedString;
- WKWebView:IOS 的WebKit框架的瀏覽器組件赞赖,從IOS 8.0 開始支持滚朵;
- UIWebView:IOS 的UIKit框架的瀏覽器組件,從IOS 2.0 開始支持前域;
測試方法:
- 使用3個組件分別顯示一個web頁面的內(nèi)容(例如:http://news.dayoo.com/guangzhou/201512/11/139995_45489706.htm)辕近;
- 頁面加載完后,清空內(nèi)容匿垄,再次加載內(nèi)容移宅,重復3次归粉;
- 比較3個組件所占用的內(nèi)存情況;
內(nèi)存調(diào)試工具:Instruments
測試結(jié)果:
DTCoreText
WKWebView
UIWebView
運行期的內(nèi)存占用: DTCoreText < WKWebView < UIWebView
運行結(jié)束后的內(nèi)存占用:WKWebView < DTCoreText < UIWebView
UIWebView一直被人詬病的內(nèi)存占用問題依舊沒有解決吞杭,如果需要打開的Html頁面比較復雜(尤其是有不少js的)還是慎用吧盏浇,新的WKWebView 確實比UIWebView 在內(nèi)存管理上做得更好,如果app可以拋棄IOS 7 或以下版本芽狗,值得使用绢掰,至少在內(nèi)存占用上已經(jīng)跟 原生的NSAttributedString 差距沒那么大了,在IOS設(shè)備內(nèi)存和性能更高的情況下童擎,差距會更小滴劲,而純Html 頁面靈活度會更高。
之前在使用UIWebView的時候顾复,試過各種釋放內(nèi)存的方法班挖,包括設(shè)置 NSURLCache,清空NSURLCache 等方法芯砸,但實際作用都不大萧芙,所以在測試中并沒有使用這些方式,只是使用 [_webContent loadHTMLString:nil baseURL:nil]; 進行清空內(nèi)容假丧;