如何修复UIViewController已经消失时调用viewDidScroll的错误?

 mobiledu2502861313 发布于 2023-02-12 15:14

我经常得到excbadaccess.极少.但有时它会发生.

我尝试了僵尸构建,我得到了这个:

*** -[BGDetailBusinessViewController scrollViewDidScroll:]: message sent to deallocated instance 0x189f09c0

我想这是由于以下原因

我在滚动时弹出一个BGDetailBusinessViewController.

视图仍在滚动.

它在某处发送通知来调用它的委托,即BGDetailBusinessViewController对象.因为对委托的引用很弱,我认为这是导致问题的原因.

现在,我究竟能解决这个问题?

弱参考工作的方式是如果对象被解除分配它将是正确的?

也许由于僵尸而不是零.但是,这意味着如果我使用zombie build构建此bug将会出现.

如果一个物体变成了僵尸,那么所有弱的物体都会被吸引到那个物体上吗?

无论如何,我想知道如何修复这个bug,因为我已经设法找到它.

有人说我应该在dealloc中将委托设置为nil.

如果我们启用僵尸对象,是否所有弱引用都被填充?另有建议.当一个对象被释放时,所有弱引用都应该被填充.

实际上我真的想不出任何理由,无论是否有僵尸,访问解除分配的对象都可能发生.如果引用很强,则不会释放对象.如果引用很弱,那么在取消分配对象时它会被填充.

然而,应用确实崩溃了错误:消息发送到解除分配的实例0x189f09c0

1 个回答
  • 您必须使用dealloc方法将委托设置为nil

    scrollView.delegate = nil;
    

    解除分配的对象被释放(并从内存中删除)但未设置为nil.你必须明确地将它设置为零.

    2023-02-12 15:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有