近日在UIWebView中访问wap网页,在wap网页中需要跳转回app,在wap页面点击rrcc://userHome的时候,回到用户中心页面,在用户中心会自动更新用户信息的时候crash。
#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"%@", NSStringFromSelector(_cmd));
//OC调用JS是基于协议拦截实现的 下面是相关操作
NSString *absolutePath = request.URL.absoluteString;
NSString *scheme = @"rrcc://";
if ([absolutePath hasPrefix:scheme]) {
NSString *cmd = [absolutePath substringFromIndex:scheme.length];
if([@"userHome" isEqualToString:cmd]) {
//或者需要改变一下设置顺序
self.tabBarController.selectedIndex = 2;
[self.navigationController popViewControllerAnimated:NO];
}
}
return YES;
}
联想到昨天stackoverflow上遇到的一个WebView加载页面的WebThread的crash建议需要及时设置WebView的delegate为nil,结合http://www.cnblogs.com/16zj/p/5026776.html,猜想可能是在WebViewController的初始化代码中设置了
self.web.delegate = self;
当WebViewController释放之后,这个web还没有释放,delegate还是有效,尝试在viewWillDisappear中设置delegate为nil后,不再有闪退问题:
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
//释放资源,防止闪退
self.web.delegate = nil;
}