当我们想加载一些网页的时候,我们就会用到UIWebView,但是细心的朋友会发现,使用UIWebView时,当我加载了好几个网页时,去Xcode看看你app的内存,可能已经超过100多M了,我在网上查了很多有关UIWebView的内存管理控制的方法,都不怎么管用,直到我用了WKWebView。
WKWebView跟UIWebView的作用一样,都可以用来加载网页,但是WKWebView却有着UIWebView无可比拟的优点(唯一的缺点是WKWebView只适用iOS8以上的系统,如果你的app要支持iOS7,那只能用UIWebView了)
WKWebView的优点:
1、内存占用很低。我用WKWebView来重新加载之前用UIWebView时加载的页面,UIWebView用了100多M,而WKWebView只是30M左右
2、加载速度快。这个优点我暂时还看不出有很大的区别,官方是这么说的,我们就这么相信吧,谁叫你做iOS开发的
3、允许JavaScript的Nitro库加载并使用
4、高达60fps的滚动刷新率以及内置手势
WKWebView的使用
1、首先要导入类库WebKit
2、导入头文件WebKit/WebKit.h
3、代理WKNavigationDelegate
4、代码如下
WKWebView *webview = [[WKWebView alloc] initWithFrame:self.view.frame];
webview.navigationDelegate=self;
webview.backgroundColor=[UIColor whiteColor];
[self.view addSubview:webview];
//加载页面,self.urlString是网址
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlString]]];
//加载进度
[webview addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];
5、代理方法(我只写了2个常用的,还有其它的代理方法)
// 页面开始加载时调用
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation
{
}
// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
}
6、加载进度
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"estimatedProgress"]){
if (object == webview){
//webview.estimatedProgress
}else{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}else{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
7、记得在dealloc移出KVC,不然会崩溃
[webview removeObserver:self forKeyPath:@"estimatedProgress"];