Pergunta

[Eu li o manual Lua, mas não forneceu respostas sólidas.]

Vamos dizer que eu tenho uma tabela Lua, atuando como uma matriz indexada:

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

Como faço para melhor dispor deste Table? Eu apenas definir myArray a zero? Ou eu tenho que percorrer array e definir cada elemento indexado a zero?

Da mesma forma, digamos que eu tenho Eu tenho uma tabela Lua, atuando como um dicionário:

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

Posso apenas definir 'myDictionary' a zero, ou eu tenho que percorrer?

Por fim, o que eu faço, memória de gestão sábia, onde tenho tabelas aninhadas? por exemplo.

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

eu preciso para percorrer cada uma dessas sub-tabelas, colocando-os a zero? Obrigado por qualquer ajuda.

Foi útil?

Solução

Na maioria GC um objeto será recolhido quando não há referências a ele. Definir o topo de sua cadeia de referência a zero remove uma referência para as crianças. Se essa era a única referência, em seguida, serão recolhidas as crianças.

Outras dicas

Ele deve ser apenas suficiente para definir a variável local para nil; não há necessidade para percorrer todas as chaves e configurá-los para nil para. De acordo com a desta página , Lua usa um algoritmo de coleta de lixo mark-and-sweep. Assim que você definir seu variável local para nil, as chaves em sua tabela de se tornar inacessível, então eles serão coletados pelo coletor de lixo na próxima coleção. Da mesma forma, se esses objetos também são tabelas, suas chaves vai também tornar-se inacessível, para que eles também serão coletados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top