最近在做项目的时候发现一个偶现的闪退,就是在反复去打开h5页面,再返回到原声页面的时候,如果反复操作,就会发生crash,而且无法定位问题,崩溃到main函数,很难查看原因。
最后我想问题可能是,webview关闭之后,一些js和原生交互的异步的回调方法回来之后web已经不存在了,delegate也不存在,给已经释放的地址去发送消息,造成了crash。也可能是其他原因。
我在返回到原生页面时候做了一些处理,现在已经解决了这个问题。
代码如下:
-(void)JDReleaseWebView
{
if (_webView && _webView.loading){
[_webView stopLoading];
}
_webView.delegate=nil;
_JDRelease = YES;
NSURL *url = [NSURL URLWithString:@""];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[_webView loadRequest:requestObj];
_webView = nil;
[self.navigationController popViewControllerAnimated:YES];
}
首先在web返回到原生页面的时候, [_webView stopLoading]; _webView.delegate=nil; 添加这两行,然后再让web去加载一个空的url,这样就基本清空了之前的url在执行的很多异步操作,不会去向一个已经释放的对象发送回调的消息。
网友评论