最近在做項目的時候發(fā)現(xiàn)一個偶現(xiàn)的閃退,就是在反復去打開h5頁面丑婿,再返回到原聲頁面的時候,如果反復操作饺饭,就會發(fā)生crash个束,而且無法定位問題靠粪,崩潰到main函數(shù),很難查看原因休傍。
最后我想問題可能是征绎,webview關(guān)閉之后,一些js和原生交互的異步的回調(diào)方法回來之后web已經(jīng)不存在了,delegate也不存在人柿,給已經(jīng)釋放的地址去發(fā)送消息柴墩,造成了crash。也可能是其他原因凫岖。
我在返回到原生頁面時候做了一些處理江咳,現(xiàn)在已經(jīng)解決了這個問題。
代碼如下:
-(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在執(zhí)行的很多異步操作甥雕,不會去向一個已經(jīng)釋放的對象發(fā)送回調(diào)的消息踩身。