QML for IOS——一个奇怪的内存泄漏问题
分类:
文章
•
2024-10-30 12:18:22
bug知悉
- 在开发一款IPad程序时,遇到了一个匪夷所思的问题,最终也虽然解决了貌似,但是还是没找到问题原因,在此记录一下。
- xcode的Memory Report中,观测到app的内存始终以缓慢却坚定的步伐增加着,但是在使用Leaks工具监测后,并没有查到内存泄漏,由于自己对xcode和ios开发并不熟练,只能通过笨办法一点点的排查代码。
开发环境
- Qt 5.12.7 + mac
- iPad air3
问题排查
- 原程序是c++与QML混合编程的,排查掉所有线程,socket,动态对象生成等可能会出问题的代码后,发现问题疑似出在QML的动画效果,定时器身上。
- 使用QML profiler进行调试,没有监测到内存无故增加。
- Memory Report和Leaks监测,始终缓慢增加。
- 单独写了测试demo,发现qml中带有循环概念属性的控件都触发了这个问题(动画设置循环,定时器设置循环触发事件,BusyIndicator running:true)。下图是一个简单的循环旋转动画的demo运行状态,并且在内存达到极限时程序确实崩溃了。
- 在Windows上测试没有发现类似问题。
问题解决
- 试了很多方法也没有解决这个问题,最后听说qt 发布了5.x最后一个版本5.15,试了一下,Surprise ,这个问题就这么解决了。可惜没搞清楚具体的问题。上一下相同demo,5.15的表现:
- 不知道其他控件会不会有问题,顺便期待下6.x。