在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]; 進行清空內容;框架