[VEProductDetailController scrollViewDidScroll:]: message sent to deallocated instance 0x130675200

问题相关描述:在一个view里面嵌套一个scrollerview,然后在scrollerview中还嵌套一个webview来完成的页面逻辑

用来实现的效果是scrollerview通过上拉来定位到webview,然后根据动态修改scrollerview是否可以滚动来控制webview的滚动处理

在进入页面,然后返回的时候触发的崩溃信息

[VEProductDetailController scrollViewDidScroll:]: message sent to deallocated instance 0x130675200

为开启调试信息之前,什么提示都没有,然后上拉到webVIEW在返回就崩溃了,报了上面的信息

于是一直纠结VEProductDetailController类中的scrollViewDidScroll方法的调用,都未能找到原因

在网上有篇文章的报错跟这个很相似:可以参考下http://blog.csdn.net/smking/article/details/43775523

开始尝试文章的方法:dealloc方法中把 scrollerview.delegate = nil 还是在崩溃

不断尝试中想到了一个问题:webview中也是有scrollerview的,于是在dealloc中把scrollerview里面嵌套的webview的代理也变为空,问题得到了解决

从提示信息中,根本没有想到问题会出现在webview上,一直都在想着VEProductDetailController这个类中的scrollerview的代理,从提示信息也很难想到这个问题

总结:

uikit里的的scrollerview方法感觉处理还是不是很全面,回调的时候,即使代理已经是销毁了的,还需要自己手动把代理变为空,

不过这个问题在ios9以上没发现问题,只在ios8版本上会出现这个问题,ios7版本就没试过了

应该是代理对象提前销毁了,但是scrollerview还没来得及销毁,方法scrollViewDidScroll的调用触发代理对象,这时候代理对象已经被销毁了,代理对象地址还记录在scrollerview的属性中,触发crash.

解决方案是:

在dealloc方法中,把用到的系统的scrollerview的代理都变为nil

原文地址:https://www.cnblogs.com/xiaowen-chen/p/5364589.html