专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

iOS H5容器的一些探究:UIWebView和WKWebView的比较和选择

Cocoa开发者社区  · 公众号  · ios  · 2016-09-07 08:07

正文

▲点击上方“ CocoaChina ”关注即可免费学习iOS开发


作者:景铭巴巴

原文链接:http://www.jianshu.com/p/84a6b1ac974a


一、Native开发中为什么需要H5容器


Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOS和google的Android)对外界提供的标准化的开发模式,他们对于native开发提供了一套标准化实现和优化方案。但是他们存在一些硬伤,比如App的发版周期偏长、有时无法跟上产品的更新节奏;灵活性差,如果有较大的方案变更,需要发版才能解决;如果存在bug,在当前版本修复的难度比较大(iOS的JSPatch方案和Android的Dex修复方案);需要根据不同的平台写不同的代码,iOS主要为object_c和swift,android为Java。


而作为H5为主要开发模式的Web App的灵活性就比较强,他利用操作系统中的h5容器作为一个承载,对外提供一个url链接,而该url链接对应的内容可以实时在服务端进行修改,灵活行很强,避免了Native发版周期带来的时间成本。但是h5虽然灵活,但是他也有自己的硬伤。每次都需要下载完整的UI数据(html,css,js),弱网用户体验较差,流量消耗较大;无法调用系统文件系统,硬件资源等等;


Native App和Web App都有他们的优势和劣势。我们也不能一棍子拍死说谁好谁劣。通常的经验是:对于一些比较稳当的业务,对用户体验要求较高的,我们可以选择Native开发。而对于一些业务变更比较快、处在不断试水的过程,而且不涉及调用文件系统和硬件调用的业务我们可以选择h5开发。所以说,在一款app中我们需要同时支持Native代码和h5代码。这也是我们标题所说的Native开发中需要H5容器的必要性。


iOS存在的h5容器主要包括UIWebView和WKWebView,下面我们就分别来说说他们的用法和优劣。


二、UIWebView的基本用法


2.1、加载网页


UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

webView.delegate = self;

[self.view addSubview:webView];

//网络地址

NSURL *url = [[NSURL alloc] initWithString:@"http://www.taobao.com"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[webView loadRequest:request];


2.2、UIWebViewDelegate几个常用的代理方法


- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

//进行加载前的预判断,如果返回YES,则会进入后续流程(StartLoad,FinishLoad)。如果返回NO,这不会进入后续流程。

- (void)webViewDidStartLoad:(UIWebView *)webView;

//开始加载网页

- (void)webViewDidFinishLoad:(UIWebView *)webView;

//加载完成

- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;

//加载失败


2.3、Native调用JS中的方法


比如我们在加载的HTML文件中有如下js代码:







请到「今天看啥」查看全文