• [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

  • 相关阅读:
    软件专利申请流程
    GitLab的权限管理及Merge Request
    git clone指定branch或tag
    pom.xml activatedProperties --spring.profiles.active=uat 对应
    Alpine容器中运行go的二进制文件
    在 Alpine Linux 中安装 bash shell
    mysql 大小写不敏感
    PB级数据实时查询,滴滴Elasticsearch多集群架构实践
    top命令输出解释以及load average 详解及排查思路
    你真的了解java的lambda吗?- java lambda用法与源码分析
  • 原文地址:https://www.cnblogs.com/xiaowen-chen/p/5364589.html
Copyright © 2020-2023  润新知