UIWebView和WKWebView都是属于加载网页的框架。曾经做过一个项目,要用到加载网页,我使用了UIWebView,程序正常,不崩溃,但是打开内存管理一看,我去!~~内存秒秒钟飙升了十多兆,并且内存有增无减,幸运的是还没有造成内存泄漏。最后,去论坛请教了大神,换用了WKWebView来完成项目。废话不多说,下面来浅谈一下两者的区别。
UIWebView | WKWebView |
---|---|
内存吃紧 | 内存近乎于UIWebView的一半 |
加载耗时长 | 加载耗时速度相对较长 |
这是目前两者间区别最大的部分
WKWebView的优势
- 适应更多的HTML5特性
(因为当下HTML5的动画炫酷,并且属于当下热门语言,发展确实尚好)
WKWebView使用
-(WKWebView *)webView{
if (!_webView) {
_webView = [[WKWebView alloc] initWithFrame:
CGRectMake(0, 85,
[UIScreen mainScreen].bounds.size.width,
[UIScreen mainScreen].bounds.size.height - self.headview.frame.size.height)];
_webView.backgroundColor = [UIColor whiteColor];
_webView.allowsBackForwardNavigationGestures = YES;
_webView.navigationDelegate = self;
}
return _webView;
}
使用WKNavigationDelegate代理方法(主要方法)
它还有UIDelegate代理方式【主要用于对窗口等的操作】
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
//客户端收到服务器跳转请求后的操作(重要)
}
-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
//开始加载时调用
}
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
//加载完成时调用
}
-(void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{
//加载失败时候调用
}
UIWebView的使用
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
//准备加载时候调用
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
//加载失败时候调用
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
//开始时候调用
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
//结束时候调用
}
注意
UIWebView的shouldStartLoad方法和WKWebView的decidePolicyForNavigation方法相似(不要和WKWebView的didStartProvisionalNavigation方法弄混)
使用WKWebView的时候一定要导入#import<WebKit/WebKit.h>
网友评论