没在dealloc方法中将delegate置为nil,程序崩溃

导致崩溃的页面有一个WKWebView。我从一个页面进入这个页面再返回,过一会儿,程序崩溃。控制台显示的崩溃信息是:

[WKWebView respondsToSelector:]: message sent to deallocated instance 0x17e986b0

然后我在dealloc方法中将webView的scrollView的delegate置为nil后就不崩溃了:

- (void)dealloc {
    self.webView.scrollView.delegate = nil;
}

使用到的scrollView的代理方法是:

self.webView.scrollView.delegate = self;

#pragma mark - UIScrollView Delegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    // 让webview的内容一直居中显示
    scrollView.contentOffset = CGPointMake((scrollView.contentSize.width - screenWidth) / 2, scrollView.contentOffset.y);
}

问:为什么将delegate置为nil后就不崩溃了?

阅读 4.6k
3 个回答

当页面销毁时delegate没有销毁,delegate的指针变成野指针了,1.把delegate的引用方式改为week 2.在dealloc的时候把delegate变为nil

因为资源没有被完全释放

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题