質問

[Luaのマニュアルを読みましたが、確固たる答えが得られませんでした。]

インデックス付き配列として機能するLuaテーブルがあるとしましょう:

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

この表をどのように処分すればよいですか? myArrayをnilに設定するだけですか?または、配列を反復処理し、各インデックス付き要素をnilに設定する必要がありますか?

同様に、辞書として機能するLuaテーブルを持っているとしましょう:

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

「myDictionary」をnilに設定することはできますか、それとも繰り返し処理する必要がありますか?

最後に、テーブルをネストしているメモリ管理に関して、私は何をしますか?例:

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

これらの各サブテーブルを反復処理して、nilに設定する必要がありますか?助けてくれてありがとう。

役に立ちましたか?

解決

ほとんどのGCでは、オブジェクトへの参照がない場合にオブジェクトが収集されます。参照チェーンのトップをnilに設定すると、子への参照が削除されます。それが唯一の参照である場合、子が収集されます。

他のヒント

ローカル変数を nil に設定するだけで十分です。すべてのキーを繰り返し処理して nil に設定する必要はありません。 このページによると、Luaはマークアンドスイープガベージコレクションアルゴリズムを使用しています。ローカル変数を nil に設定するとすぐに、そのテーブル内のキーは到達不能になるため、次のコレクションでガベージコレクターによって収集されます。同様に、それらのオブジェクトもテーブルである場合、それらのキーも到達不能になるため、それらも収集されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top