WKWebView 继 UIWebView 之后的 Web 组件,拥有更佳的渲染效率,加载更快内存占用也更低,但渲染页面的时候可能出现白屏的情况.
UIWebView 遇到占用内存较高的情况下会导致 App Process 的 crash;
WKWebView 遇到占用内存较高的情况下会导致 WebContentProcess 的 crash;
两者总体内存占用情况相差并不太多,不过 WKWebView 将其一部分内存的消耗通过多进程的方式拆解执行;
可以基于 WKWebView 这项 webViewWebContentProcessDidTerminate 的代理方法进行白屏的处理,当其整体内存占用较大即将出现白屏的情况下调用其方法并执行重新加载的操作.此时的 URL 还未被置为 nil,而白屏后则会丢失其 URL.
- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView { // 内存消耗较大导致当前所加载的 webView 出现白屏状况
[webView reload]; // 刷刷刷它的
}
除此之外还遇到了同样存在白屏可能的情况,初始化 WKWebView 时未预先设置与JS的通信桥协议,具体如下
[wkConfig.userContentController addScriptMessageHandler:self name:@"WebCallApp"];
目前开发中暂时遇到了这两种可能性会导致白屏的情况出现,可供大家参考排查.
以上便是此次分享的全部内容,希望能对大家有所帮助!