从bugly上捕捉到几个崩溃记录,崩溃率非常的高。在进入直播间的时候,退出再重新进入就会发生这个崩溃。但是非常奇怪的是测试那边都是通过的,我自己平时调试过程中也从来没有出现过。。。。。
这个问题是系统决定的,我们平时使用的都是iOS10的系统,但是外部用户的系统就很复杂,在iOS8的系统上就会出现这种问题。iOS10的系统在对象销毁的情况下,默认是会调用移除通知的方法的,但是iOS8的不行,必须手动释放。这个可以查看文章iOS NSNotificationCenter 使用姿势详解
顺着bugly捕捉到的方法去查找,发现是通知的地方奔溃了,第一反应“就是发个通知而已,什么都没干,怎么会奔溃!!”,而且查看线程也是主线程,没毛病。。。最后找不到了,就去goole了一下
Make sure you remove all notification observers before freeing them. This problem occurs when an observer is freed and notification center has still a pointer to that object and tries to notify it. Check that all addObserver have the corresponding removeObserver calls
还有一篇文章iOS小记--postNotificationName闪退
突然联想到之前也有一个弹出键盘的bug,有没有发现很类似
不过,这个问题就没有那么顺利去排查了,奔溃的信息不是很明显,提示的是[textView becomeFirstResponder]这里崩溃,为什么弹出键盘的方法也会崩溃呢,也是各种尝试搞不定,主要是这种的奔溃,每次奔溃的信息都是不一样的,非常难定位问题,绕了很多的弯路,不过每次都会报“EXC_BAD_ACCESS”,所有就开启的Xcode的僵尸对象的检测,开了之后确实不一样,定位准确,再结合上一个bug的解决经验,很快就找到问题。
还是通知没有释放的问题,本来还以为是textView在成为第一响应者的时候,系统会发送一些通知,结果根本不是这样的,就是自己的通知没有释放
放一个关于崩溃的文章iOS Crash Log 分析(三)
看到“EXC_BAD_ACCESS”肯定就某个对象已经被释放了,但是又去访问(操作)它导致的