UIWebView和WKWebView使用(一)

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)頁前


使用WKWebView加載阿里巴巴網(wǎng)頁后
使用WKWebView加載阿里巴巴網(wǎng)頁返回后

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

使用UIWebView加載阿里巴巴網(wǎng)頁前
使用UIWebView加載阿里巴巴網(wǎng)頁后
使用UIWebView加載阿里巴巴網(wǎng)頁返回后

可以看出到這里使用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);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容