Copyright ? 2017年ZaneWangWang. All rights reserved.
一.UIWebView和WKWebView介紹
? ? ? ?UIWebView自iOS2就有,WKWebView從iOS8才有,毫無疑問WKWebView將逐步取代笨重的UIWebView。通過簡單的測試即可發(fā)現(xiàn)UIWebView占用過多內(nèi)存,且內(nèi)存峰值更是夸張。WKWebView網(wǎng)頁加載速度也有提升,但是并不像內(nèi)存那樣提升那么多。
1.自測加載阿里巴巴網(wǎng)頁能存占有對比如下圖:



使用WKWebView加載網(wǎng)頁后內(nèi)存變化不大,使用WKWebView加載網(wǎng)頁返回后內(nèi)存變化也不大



可以看出到這里使用UIWebView加載阿里巴巴網(wǎng)頁導致內(nèi)存飆升,返回后內(nèi)存并沒有很有效的??。
2.WKWebView相比UIWebView的其他優(yōu)勢如下幾點:
a>.更多的支持HTML5的特性
b>.官方宣稱滾動屏率高達60fps
c>.內(nèi)置手勢
d>.和系統(tǒng)Safari相同的JS引擎
e>.增加加載進度屬性:estimatedProgress(比較常用)
f>.將UIWebViewDelegate和UIWebView進行拆分細化,了解更多查看官方文檔
二.UIWebView和WKWebView使用
1.創(chuàng)建對比
UIWebView的創(chuàng)建
UIWebView *webView = [[UIWebView alloc] init];//直接創(chuàng)建,js交互基本也不需要設(shè)置什么
WKWebView的創(chuàng)建
WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuretion]; //需要傳一個WKWebViewConfiguration的對象
注意:要給configuretion進行如下設(shè)置要不然js交互不能進行
configuretion.preferences.javaScriptCanOpenWindowsAutomatically = YES;
2.加載方法對比
a>.加載網(wǎng)頁都是調(diào)用loadRequest:方法,沒有什么不同,但是性能上邊也說過,當然還是WKWebView性能要好
b>.加載h5字符串都是調(diào)用loadHTMLString:baseURL:方法
這里需要注意如果后臺返回的h5字符串沒有head,加載出來是沒有適配的,顯示不完全需要自己給h5字符串添加如下操作:
NSString *htmls = [NSString stringWithFormat:@" \n"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? " \n"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ""? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ""
"window.onload = function(){\n"
"var $img = document.getElementsByTagName('img');\n"
"for(var p in? $img){\n"
" $img[p].style.width = '100%%';\n"
"$img[p].style.height ='auto'\n"
"}\n"
"}"
"%@"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ""? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "",h5Str];
在加載完成的代理方法中做一個如下的高度適配
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
webView.contentSize = CGSizeMake(webView.frame.size.width,height);
}