Question

[J'ai lu le manuel de Lua, mais il n'a pas fourni de réponse solide.]

Disons que j'ai une table Lua, agissant comme un tableau indexé:

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

Comment puis-je disposer au mieux de cette table? Dois-je simplement régler myArray sur nil? Ou dois-je parcourir le tableau et définir chaque élément indexé sur nil?

De la même façon, disons que j'ai un tableau Lua faisant office de dictionnaire:

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

Puis-je simplement définir "myDictionary" sur nil ou dois-je parcourir plusieurs fois?

Enfin, que dois-je faire, en ce qui concerne la gestion de la mémoire, où j'ai imbriqué des tableaux? par exemple

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

Dois-je parcourir chacune de ces sous-tables en les mettant à zéro? Merci pour toute aide.

Était-ce utile?

La solution

Dans la plupart des GC, un objet sera collecté s’il n’ya pas de référence. Si vous définissez le haut de votre chaîne de référence sur nil, vous supprimez une référence aux enfants. Si c’était la seule référence, les enfants seraient rassemblés.

Autres conseils

Il devrait suffire de définir la variable locale sur nil ; il n'est pas nécessaire de parcourir toutes les clés et de les définir sur nil . Selon cette page , Lua utilise un algorithme de récupération de place par balayer. Dès que vous définissez votre variable locale sur nil , les clés de sa table deviennent inaccessibles. Elles seront donc collectées par le ramasse-miettes de la prochaine collection. De même, si ces objets sont également des tables, leurs clés deviendront également inaccessibles et seront donc également collectées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top