[英]Memory management for list of QObject* results in "Cannot read property X of null" errors in QML
[英]QML object property memory management
如果我有一些对象,Item或QtObject作为QML元素的属性(让我们说Item作为容器,但我也对这种情况感兴趣,当包含对象是QtObject时),内存管理是如何完成的?
考虑以下几种情况:
1: property var someObject: { "key" : "value" }
2: property Item someItem: Item { ... }
3: property QtObject someQtObject: QtObject { ... }
包含元素是父母吗? 当父进程被销毁时,是否会释放属性对象的内存? 这实际上不是一件好事,并且可能导致内存泄漏,除非在代码中删除或释放属性? 等等。 任何见解?
此外,在这种情况下做这样的事情是否有益:
4: property Item someItem: Item {
parent: containingElementId
...
}
我有时需要执行此处的操作,而不是简单地将对象配置为项的子默认属性。 此外,当包含对象是QtObject时,没有子默认属性,但仍需要管理内存。
property Item someItem: Item { ... }
该项目不会成为父级,但仍将收集。 明确设置父级将确保它在相应的父级中可见。
请记住, Item::parent
是可视父级,而不是实际的父级。 因此,即使您明确设置了比属性持有者对象存活时间更长的父级,仍然会收集属性值对象。
这是因为与保持为null的可视父对象不同,“逻辑”父对象将被设置为属性持有者对象。
QML的内存管理是自动的,大多数部件都按预期工作。 要记住两件事:
所以基本上:
它很可能没问题,但即使它没有,你也无能为力,因为没有明确删除JS对象
将被收集但不可见
将被收集(请记住QtObject不会暴露任何父级)
将被收集,但也将是可见的,幸存的父母将不会保存它从删除
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.