键盘显示的情况下,按home进入后台,再点击app图标切换回前台时发生crash

问题描述:键盘显示的情况下,按home进入后台,再点击app图标切换回前台时发生crash,控制台没有任何打印信息,只是停在了main入口,一脸懵圈。

如何找到crash原因?

解决方法:如果打开了ARC或垃圾回收模式,在程序中发消息给已经释放的对象,将会引起程序崩溃。这时定位崩溃原因将非常困难,因为出问题的对象已经重新分配了。

可以通过启动僵尸对象(Zombie Objects)来解决,开启该选项后,程序在运行时,如果访问了已经释放的对象,则会给出较准确的定位信息,可以帮助确定问题所在。

功能的原理:在对象释放(retainCount 为0)时,使用一个内置的Zombie对象,替代原来被释放的对象。无论向该对象发送什么消息(函数调用),都会触发异常,抛出调试信息。

键盘显示的情况下,按home进入后台,再点击app图标切换回前台时发生crash

再次复现bug,控制台输出:

[UIKeyboardLayoutStar release]: message sent to deallocated instance


Google控制台输出信息,由于项目中使用了runtime替换NSMuatbelArray的objectAtIndex:的方法导致crash。


解决方案:为交换方法的.m文件添加-fno-objc-arc开启非arc模式


键盘显示的情况下,按home进入后台,再点击app图标切换回前台时发生crash


最后记得关闭Zombie Objects选项。