问题如题
首先得到的报错信息如下:
这个报错的意思是向一个已经释放的对象发送消息的问题。解决这类问题的做法从内存地址解析得到该地址的堆栈信息。
-
确保开启了Zombie Objects 和 malloc track
WX20190301-104614@2x.png -
打开活动监视器找到你的项目所在pid(进程id) ,一般输入项目名就能找到你的pid
-
打开终端,输入:
# 6220代表你的pid # 0x110cec090是内存地址 sudo malloc_history 6220 0x110cec090
很不幸,我没有通过这种方式找到有用的信息
WX20190301-105149@2x.png然后我开始观察:
-[UIWindowLayer retain]: message sent to deallocated instance 0x110cec090
很容易想到可能是某个window被提前释放导致问题的
于是我重新运行,在Appdelegate方法内打印所有window的信息,我得到的信息如下:
WX20190301-110839@2x.png从这些信息可以看到 WXWindow
的内存地址是0x110dc7490
随后的崩溃信息如下:
**-[UIWindowLayer retain]: message sent to deallocated instance 0x110dc7490
问题已经很明显了,就是WXWindow类这个对象的提前释放导致出现崩溃的。这是weex调试时在顶部的一个小蓝条。很遗憾。weex框架内部代码无法修改。
最后验证:我移除了与weex调试相关的代码之后,发现一切正常,最后复原代码重新测试,发现又出现了崩溃。于是我认为我的结论是正确的。
网友评论