![](/img/trans.png)
[英]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.