Frage

[Ich habe das Lua Handbuch zu lesen, aber es nicht bot solide Antworten.]

Lassen Sie uns sagen, ich habe eine Lua-Tabelle, als indiziertes Array handeln:

local myArray = {};
myArray[1] = "Foo";
myArray[2] = "Bar";

Wie am besten I dieser Tabelle entsorgen? Muss ich myArray auf Null nur eingestellt? Oder muss ich durch Array durchlaufen und jedes indizierte Element auf Null gesetzt?

In ähnlicher Weise lassen Sie uns sagen, ich habe ich habe eine Lua-Tabelle, die als ein Wörterbuch:

local myDictionary = {};
myDictionary["key1"] = "Foo";
myDictionary["key2"] = "Bar";

Kann ich nur gesetzt ‚myDictionary‘ auf Null, oder muss ich durchlaufen haben?

Schließlich, was soll ich tun, Speicher-Management-weise, wo ich die Tabellen verschachtelt habe? z.

local myNestedCollection = {};
myNestedCollection[1] = {1, 2, 3};
myNestedCollection[2] = {4, 5, 6};

Muss ich durch jede dieser Untertabellen zu durchlaufen, so dass sie auf Null einstellen? Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

In den meisten GC wird ein Objekt gesammelt werden, wenn es keine Hinweise darauf gibt. Einstellen der Spitze Ihrer Referenzkette auf Null entfernt einen Verweis auf die Kinder. Wenn das der einzige Hinweis war dann werden die Kinder gesammelt werden.

Andere Tipps

Es sollte gerade ausreichend sein, um die lokale Variable auf nil; es gibt keine Notwendigkeit, durch alle Schlüssel iterieren und setzen Sie sie auf nil. Nach dieser Seite verwendet Lua einen Mark-and-Sweep-Garbage-Collection-Algorithmus. Sobald Sie Ihre lokale Variable die Schlüssel in seiner Tabelle nil, werden nicht erreichbar, so werden sie vom Garbage Collector auf der nächsten Sammlung gesammelt werden. Und falls diese Objekte auch Tabellen sind, ihre Schlüssel auch unerreichbar werden, so werden auch sie gesammelt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top