博客>
iOS 8.1 因WKWebview导致视图控制器释放不掉而内存崩溃的问题
iOS 8.1 因WKWebview导致视图控制器释放不掉而内存崩溃的问题
版权声明:本文为博主原创文章,未经博主授权不得转载。
异常描述:
pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
问题描述:
引用到WKWebview,为使用方便将WKWebview设为了成员变量,然后又设置了该成员变量的scrollview的属性的代理为当前视图控制器,然后就出现了问题,每次push时候从新创建时候总会访问之前的内存,然后报错说访问了一块已经释放掉的内存,pop出栈的时候会崩溃,这样一直找不到问题的存在
但问题只会出现在iOS10.0以下的系统。
在模拟器上使用8.1的系统调试确实会有这种异常,
使用malloc_error_break定位,也只能定位到内存释放时出栈异常,没办法继续调试。
原因:
通过排除法,发现只要不监听wkwebview.scrollview的delegate,就不会异常; 崩溃原因代码: _wkWebView.scrollView.delegate=self;
想起scrollview是strong引用:
@property (nonatomic, readonly, strong) UIScrollView *scrollView;
解决方法: 后来才知道强引用了scrollview,代理释放不掉,所以会报错,解决办法,在dealloc函数或者viewwillappear等函数中将代理设为nil就解决了
if(_wkWebView){
_wkWebView.scrollView.delegate=nil;
}
收藏