博客> iOS 8.1 因WKWebview导致视图控制器释放不掉而内存崩溃的问题
iOS 8.1 因WKWebview导致视图控制器释放不掉而内存崩溃的问题
2019-12-09 11:44 评论:0 阅读:801 616227369

异常描述:

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; 

}
收藏
0
sina weixin mail 回到顶部