سؤال

[لقد قرأت دليل لوا، لكنها لم تقدم إجابات الصلبة.]

ودعونا نقول لدي جدول لوا، بوصفها مجموعة المفهرسة:

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

وكيف يمكنني الأفضل التخلص من هذا الجدول؟ هل أنا مجرد مجموعة myArray إلى لا شيء؟ أو لا بد لي من تكرار خلال مجموعة وتعيين كل عنصر مفهرسة لشيء؟

وعلى نحو مماثل، دعنا نقول لدي لدي جدول لوا، بوصفها القاموس:

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

هل أنا مجرد مجموعة 'myDictionary "إلى لا شيء، أو لا بد لي من تكرار خلال؟

وأخيرا، ماذا أفعل، إدارة الذاكرة الحكمة، حيث كنت قد تتداخل الجداول؟ منها مثلا.

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

هل أنا بحاجة إلى تكرار خلال كل من هذه الجداول الفرعية، ووضع لهم شيء؟ شكرا على اي مساعدة.

هل كانت مفيدة؟

المحلول

في معظم GC سيتم جمعها كائن عندما لا يكون هناك ما يشير إلى ذلك. وضع الجزء العلوي من سلسلة رجوع إلى لا شيء يزيل إشارة إلى الأطفال. إذا كان هذا هو المرجع الوحيد ثم سيتم جمع الأطفال.

نصائح أخرى

وينبغي أن يكون كافيا فقط لتعيين متغير محلي إلى nil. ليس هناك حاجة إلى تكرار خلال كافة المفاتيح ومجموعة منهم لnil ل. ووفقا ل هذه الصفحة ، يستخدم لوا علامة والاجتياح جمع القمامة الخوارزمية. بمجرد تعيين متغير المحلي إلى nil، مفاتيح في الجدول الخاص به تصبح غير قابلة للوصول، ولذلك سوف يتم جمعها من قبل هواة جمع القمامة على جمع المقبل. وبالمثل، إذا كانت هذه الكائنات هي أيضا الجداول، ومفاتيحهم أيضا أن تصبح قابلة للوصول، لذلك هم أيضا سيتم جمعها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top