JJException icon indicating copy to clipboard operation
JJException copied to clipboard

KVO 野指针crash

Open aMing086 opened this issue 4 years ago • 12 comments

Describe the bug 在 KVOObjectItem 中 @property(nonatomic,readwrite,assign)NSObject* observer; 会有野指针的问题;

aMing086 avatar Apr 28 '20 11:04 aMing086

先确认是不是最新版本,如果错误堆栈,麻烦贴出来,方便我分析问题

jezzmemo avatar Apr 28 '20 11:04 jezzmemo

先确认是不是最新版本,如果错误堆栈,麻烦贴出来,方便我分析问题

包是上个月底git上下载的;把assign 改成 weak 似乎可以解决问题; 屏幕快照 2020-04-28 下午7 51 28

aMing086 avatar Apr 28 '20 11:04 aMing086

这个问题,你怎么操作出来的?还是直接用的demo就挂了?

jezzmemo avatar Apr 28 '20 11:04 jezzmemo

这个问题,你怎么操作出来的?还是直接用的demo就挂了?

为了验证你的代码没有问题,在demo上跑测试跑出来的;另外还有个问题就是被监听者的生命周期如果比监听者的生命周期长的话也会crash;

aMing086 avatar Apr 28 '20 12:04 aMing086

这个问题,你怎么操作出来的?还是直接用的demo就挂了?

需要的话,可以把我改的demo给你以及操作路径;

aMing086 avatar Apr 28 '20 12:04 aMing086

这个问题,你怎么操作出来的?还是直接用的demo就挂了?

需要的话,可以把我改的demo给你以及操作路径;

你改了我的demo那些,明确点,我好复现

jezzmemo avatar Apr 28 '20 12:04 jezzmemo

这个问题,你怎么操作出来的?还是直接用的demo就挂了?

需要的话,可以把我改的demo给你以及操作路径;

你改了我的demo那些,明确点,我好复现

没有修改库里的东西;开启hook,先在一级界面创建一个对象A,传到二级界面,二级界面对A里的属性进行监听;不移除监听返回一级界面此时在 ios10 就会crash;在ios10 以上还可以继续操作;再次进入二级界面 并对A进行监听(此时可能就会crash,没有crash 就返回一级界面再次进入二级界面并对A进行监听);

aMing086 avatar Apr 28 '20 12:04 aMing086

这个问题,你怎么操作出来的?还是直接用的demo就挂了?

需要的话,可以把我改的demo给你以及操作路径;

你改了我的demo那些,明确点,我好复现

你好,复现了吗?可以解决吗?

aMing086 avatar Apr 29 '20 01:04 aMing086

这个问题,你怎么操作出来的?还是直接用的demo就挂了?

需要的话,可以把我改的demo给你以及操作路径;

你改了我的demo那些,明确点,我好复现

你好,复现了吗?可以解决吗?

我这几天有点忙,如果能稳定复现,肯定能解决,只是我要晚点解决

jezzmemo avatar Apr 29 '20 02:04 jezzmemo

@aMing086 你好,我刚刚按照你的复现步骤,测试了KVO的问题,我并没有复现,我当前的环境是iOS13,分支是fix/kvoBug81,如果方便你可以切换到我的这个分支确认下

jezzmemo avatar May 31 '20 14:05 jezzmemo

NSObject+KVOCrash.m - 第 200 行 -[JJObserverContainer cleanObservers] + 200

NSObject+SwizzleHook.m - 第 151 行 __jj_swizzleDeallocIfNeeded_block_invoke_3 + 151

@jezzmemo 这个问题我也没有按如上复现,但是确实存在。我的项目刚刚集成最新版本,后台太多这个崩溃信息了,也猜测是如上原因,请早点看下解决。

LuckyCat7848 avatar Jun 05 '20 04:06 LuckyCat7848

我们app也发生这个crash了,场景是app切换后台,JE版本是0.27.0。 我现在更新0.2.8试试,有问题再反馈 [JJObserverContainer cleanObservers] (NSObject+KVOCrash.m:200) __jj_swizzleDeallocIfNeeded_block_invoke_3 (NSObject+SwizzleHook.m:151)

wuyj avatar Jul 04 '20 09:07 wuyj