[flex] كيف يمكنني الحصول على "موقع الذاكرة" في مثيل في ActionScript؟


Answers

عمل حل Diney Bomfim مثل السحر. أنا ملفوفة هذا في فئة تسمى DebugUtils في دالة المسمى getObjectMemoryHash .

package
{
    public class DebugUtils
    {
        public static function getObjectMemoryHash(obj:*):String
        {
            var memoryHash:String;

            try
            {
                FakeClass(obj);
            }
            catch (e:Error)
            {
                memoryHash = String(e).replace(/.*([@|\$].*?) to .*$/gi, '$1');
            }

            return memoryHash;
        }
    }
}

internal final class FakeClass { }

ثم يمكنني استخدام هذه الوظيفة من أي مكان وتتبعها ، مثل:

trace('myObj', DebugUtils.getObjectMemoryHash(myObj));

شكرا جزيلا لهذه الإجابة!

Question

سيعرض لك مصحح أخطاء FlexBuilder "موقع الذاكرة" (أو ، يمكنني فقط أن افترض ، شيئًا مشابهًا تقريبًا) لأي مثيل داخل النطاق:

لكنني أرغب في الحصول على هذه المعلومات في الكود (نوع يشبه وظيفة بيثون id ) ، لذلك يمكنني بسهولة تتبع كيفية تحرك الأشياء عبر النظام. على سبيل المثال ، ربما أكون قد:

trace("Returning", id(foo));

ثم في مكان آخر يمكنني استخدامه:

trace("Using", id(foo));

للتأكد من أن كلا البايتين من التعليمات البرمجية يتعاملان مع نفس المثيل.

الآن ، أعلم أن العديد من الطبقات AS تقوم IUID واجهة IUID ... لكن هناك أيضًا مجموعة من الطبقات التي لا تقوم (مثل صفائف قديمة وعناصر ، على سبيل المثال) ، بحيث لا يحل مشكلتي.

أدرك أنه يمكنني أيضًا التفاف الأشياء في ObjectProxy ، ولكن ذلك سيكون أقل من المثالي أيضًا.




private static var _uids:Dictionary = new Dictionary(true);
private static var _cter:uint = 1;

public static function getObjectMemoryHash(obj:*):uint {
   var ret:uint = _uids[obj];
   return (ret == 0) ? (_uids[obj] = _cter++) : ret;
}

هذا يعمل بشكل جيد لكنه يأخذ رقم تعريف فريد




AFAIK توجد طريقة للوصول إلى القيمة التي يظهر لك مصحح الأخطاء في وقت التشغيل.

إجمالي اللقطة في الظلام ولكن أعتقد أنه يمكنك استخدام === المقارنة لتحديد ما إذا كان جسمان هما نفس الكائن (على النقيض من == الذي يقارن قيم الكائنات). لكن يمكن أن أكون مخطئا تماما في ذلك.




Related