iOS开发,关于block的EXC_BAD_ACCESS闪退问题

稚友` 2020-10-14 04:24:02
请教大佬帮忙分析,生产环境上出现了偶尔闪退的问题,涉及的代码如下:

1、下面代码所在类是通过获取单例进行初始化的


2、此方法- (viod) undoHightlightComplete:(XFMarkingComplete)complete;是通过获取单例对象来调用的; 属性strongSelf.showImageMake 的showImageMake是通过懒加载的方式进行初始化的;
- (XFShowImageMake *)showImageMake {
if (!_showImageMake) {
_showImageMake = [[XFShowImageMake alloc]init];
}
return _showImageMake;
}

3、程序出现的这个非必现的奔溃问题,错误定位在方法showImageWithGrayMask:内部,如下代码:
if (self.showImageBlock) {
self.showImageBlock(MatToUIImage(image));
}
错误定位在 if (self.showImageBlock) { 这一行的self,提示:Thread 2: EXC_BAD_ACCESS (code=1, address=0x20)

图片如下:


5、这个奔溃还不是稳定重现的,测试了老久老久才重现出来。

想不到什么情况下,单例的属性被回收了?

还是前面的weakSelf、strongSelf使用有问题呢?

求助大佬解答~
...全文
8624 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
严青 2020-12-11
  • 打赏
  • 举报
回复
里面就不要strong了,判断是不是self == nil 就行了
HumorousGhost 2020-10-16
  • 打赏
  • 举报
回复
引用 1 楼 荒唐的天梯 的回复:
个人觉得是showImageMake懒加载创建对象的问题,因为你是 并发队列异步执行,可能会出现创建多个对象的问题,你把这个属性设置成 atomic 试试
还有就是崩溃 要看堆栈,当前崩溃的位置,未必就是真正崩溃的位置
HumorousGhost 2020-10-16
  • 打赏
  • 举报
回复
个人觉得是showImageMake懒加载创建对象的问题,因为你是 并发队列异步执行,可能会出现创建多个对象的问题,你把这个属性设置成 atomic 试试

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧