QML for IOS——一个奇怪的内存泄漏问题

bug知悉

  • 在开发一款IPad程序时,遇到了一个匪夷所思的问题,最终也虽然解决了貌似,但是还是没找到问题原因,在此记录一下。
  • xcode的Memory Report中,观测到app的内存始终以缓慢却坚定的步伐增加着,但是在使用Leaks工具监测后,并没有查到内存泄漏,由于自己对xcode和ios开发并不熟练,只能通过笨办法一点点的排查代码。

开发环境

  • Qt 5.12.7 + mac
  • iPad air3

问题排查

  1. 原程序是c++与QML混合编程的,排查掉所有线程,socket,动态对象生成等可能会出问题的代码后,发现问题疑似出在QML的动画效果,定时器身上。
  2. 使用QML profiler进行调试,没有监测到内存无故增加。
  3. Memory Report和Leaks监测,始终缓慢增加。
  4. 单独写了测试demo,发现qml中带有循环概念属性的控件都触发了这个问题(动画设置循环,定时器设置循环触发事件,BusyIndicator running:true)。下图是一个简单的循环旋转动画的demo运行状态,并且在内存达到极限时程序确实崩溃了。
    在这里插入图片描述
  5. 在Windows上测试没有发现类似问题。

问题解决

  • 试了很多方法也没有解决这个问题,最后听说qt 发布了5.x最后一个版本5.15,试了一下,Surprise ,这个问题就这么解决了。可惜没搞清楚具体的问题。上一下相同demo,5.15的表现:
    在这里插入图片描述
  • 不知道其他控件会不会有问题,顺便期待下6.x。