Wenn ich ein Objekt, Item oder QtObject als eine Eigenschaft eines QML-Elements (sagen wir Item als Container, aber ich interessiere mich auch für die Situation, wenn das enthaltende Objekt QtObject ist), wie ist das Speichermanagement erledigt?QML-Objekt Eigenschaft Speicherverwaltung
Denken Sie über diese folgenden Situationen:
1: property var someObject: { "key" : "value" }
2: property Item someItem: Item { ... }
3: property QtObject someQtObject: QtObject { ... }
Wird das Element enthält, das Elternteil sein? Wird die Erinnerung an das Eigentumsobjekt freigegeben, wenn der Elternteil zerstört wird? Ist das eigentlich keine gute Sache und kann zu Speicherlecks führen, wenn die Eigenschaften nicht gelöscht oder in Code freigegeben werden? Und so weiter. Irgendwelche Einsichten?
Auch wäre es von Vorteil sein, so etwas wie dies in einer solchen Situation zu tun:
4: property Item someItem: Item {
parent: containingElementId
...
}
ich manchmal die Notwendigkeit, Dinge zu tun, wie hier, und nicht nur das Objekt konfigurieren unter den Kindern Verzug, Eigenschaft eines Artikels. Wenn das umschließende Objekt QtObject ist, gibt es keine Kinder-Standardeigenschaft, aber der Speicher muss weiterhin verwaltet werden.
https://youtu.be/77LH_I_Vx5E könnte für Dich von Interesse sein. –
Danke. Um 12:45 scheint die Nachricht zu sein, dass Ints und Bools möglicherweise besser als Vars gespeichert werden. Ob einige andere Typen eher vars oder typenspezifisch sein sollten, wurde nicht angesprochen, aber es scheint, dass in der Zukunft Qt Quick Releases von 6 an alles von der V4-Engine verarbeitet werden, und var legt Sachen auf diese Seite. –
17:35 Vor ein oder zwei Folien wurde besprochen, wie die GC- oder Elternbeziehung die Speicherbereinigung von dynamischen Objekten handhaben wird, aber jetzt schlägt er vor, immer die Funktion destroy() zu verwenden, scheint hier eine Diskrepanz zu bestehen. - Es sei denn, wenn er speziell für die Fälle gedacht war, in denen der visuelle Elternteil in der dynamischen Erstellung angegeben wurde, in diesem Fall würde ein unnötiges dynamisches Objekt nicht vor dem Elternteil gelöscht, ohne den Befehl destroy() aufzurufen. –