这里是对控制器pop之后,dealloc不执行问题的总结:
1、如果控制器中使用WKWebView,并且注册了js方法之后,必须要在控制器pop之前移除该注册方法。
- (WKWebView *)webView {
if (!_webView) {
// 进行配置控制器
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
// 实例化对象
configuration.userContentController = [WKUserContentController new];
// 调用JS方法
[configuration.userContentController addScriptMessageHandler:self name:@"jump"];
_webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:configuration];
_webView.backgroundColor = [UIColor whiteColor];
_webView.navigationDelegate = self;
_webView.UIDelegate = self;
self.webView.allowsBackForwardNavigationGestures = YES;
}
return _webView;
}
// 必须移除注册的方法
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (_webView) {
[_webView.configuration.userContentController removeScriptMessageHandlerForName:@"jump"];
_webView.UIDelegate = nil;
_webView.navigationDelegate = nil;
[_webView removeFromSuperview];
_webView = nil;
}
}
2、如果控制器中使用了UITableView,需要在pop的时候移除tableView。(至于是不是注册自定义cell的原因导致的,目前不清楚)
if (_tableView) {
[_tableView removeFromSuperview];
_tableView = nil;
}