前言
项目接近尾声,昨天在测试的时候发现了一个闪退的问题。测试的设备为iPhone5s,系统是iOS 8.3,其他的测试设备都不会崩溃。临近下班,就没有多想,感觉就是一个谜之bug,从Bugly反馈的日志看,也只能看到是因为内存释放出栈异常。一早上班就看了一下这个闪退的问题。记录一下两个小时的爬坑记。
Bug描述
设备:iPhone5s,系统:iOS 8.3,在进入一个WKWebView加载的本地html标签的页面,退出该页面必定闪退。而且这个问题只会出现在iOS 10以下的系统。
为爱Debug
因为知道是内存释放的问题,所以从dealloc
方法入手,发现程序正常的走了dealloc
方法,然后就崩溃了。因为这是一个很简单的页面,整个页面就三个控件,WKWebView和两个UIButton,两个Button是根据WKWebView的滚动与否决定显不显示。然后发现只要这个页面有WKWebView就会崩溃。通过分析发现,是因为设置了WKWebView.scrollView.delegate,而scrollView在WKWebView是strong强引用的,而在这个页面监听了scrollView的delegate。解决方法就是在dealloc
方法中将delegate置空。WKWebView.scrollView.delegate = nil
。
网友评论