Вопрос

[Я прочитал руководство по Lua, но оно не дало четких ответов.]

Допустим, у меня есть таблица Lua, выступающая в качестве индексированного массива:

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

Как лучше всего распоряжаться этой таблицей? Мне просто установить myArray на ноль? Или мне нужно перебрать массив и установить для каждого индексированного элемента значение nil?

Точно так же, допустим, у меня есть таблица Lua, выступающая в качестве словаря:

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

Могу ли я просто установить для myDictionary значение nil или мне нужно выполнить итерацию?

И, наконец, что мне делать, в отношении управления памятью, где у меня есть вложенные таблицы? например.

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

Нужно ли перебирать каждую из этих вложенных таблиц, устанавливая их в ноль? Спасибо за любую помощь.

Это было полезно?

Решение

В большинстве GC объект будет собираться, когда на него нет ссылок. Установка верхней части вашей цепочки ссылок на ноль удаляет ссылку на детей. Если это была единственная ссылка, то дети будут собраны.

Другие советы

Достаточно просто установить для локальной переменной nil ; нет необходимости перебирать все ключи и устанавливать их в nil в. Согласно этой странице , Lua использует алгоритм сбора мусора с разметкой и разметкой. Как только вы зададите для своей локальной переменной nil , ключи в ее таблице станут недоступными, поэтому они будут собраны сборщиком мусора в следующей коллекции. Аналогичным образом, если эти объекты также являются таблицами, их ключи также станут недоступными, поэтому они также будут собраны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top