iOS 控制器pop之后,dealloc不执行

这里是对控制器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;
 }

你可能感兴趣的:(iOS 控制器pop之后,dealloc不执行)