На самом деле я советую вам не использовать это слишком много ... это очень дорого. Adobe нужно создать собственную функцию, чтобы вернуть это нам.
Но пока ... попробуйте это:
Вам понадобится явное принуждение, чтобы получить его!
Потому что когда вы делаете явное принуждение, вы получаете ошибку, подобную этой:
TypeError: Error #1034:
Type Coercion failed: cannot convert Main@1c49d31 to flash.utils.ByteArray.
Обратите внимание, что в этой ошибке вы получаете то, что хотите ... @ 1c49d31. Этот хеш похож на идентификатор в распределении памяти.
Я сделал много тестов. Этот хэш просто меняется, когда вы вызываете «new» (в языках C эквивалентно [[... alloc] init]), а для статических функций и статических свойств распределение происходит немного по-другому ... в любом случае ...
Возвращаясь к Flash, проблема в том, что у нас нет прямого способа получить этот хэш без ошибки.
Но это не очень большая проблема. Все, что вам нужно, это использовать "попробовать" и "поймать"
Как это:
try
{
ByteArray(anyObjectToKnowItAllocationHash);
}
catch (e:Error)
{
trace(e);
}
И вуаля!
Вы получите хэш без результата в ошибке!
После этого я сделал более изощренный способ ... Попробуйте это:
var memoryHash:String;
try
{
FakeClass(anyObjectToKnowItAllocationHash);
}
catch (e:Error)
{
memoryHash = String(e).replace(/.*([@|\$].*?) to .*$/gi, '$1');
}
internal final class FakeClass { }
Небольшое объяснение по этому поводу:
FakeClass должен быть уверен, что это вызовет ошибку.
Регулярное выражение должно захватывать последние @ ..., которые появляются. Потому что объекты и функции генерируют разные сообщения об этой ошибке. А $ - это перехват статических объектов, классов и функций, потому что у них нет «@» в хеш-памяти и различных зон в памяти.
Этот маленький код прекрасно работает для меня! Теперь я могу закончить некоторые замечательные движки, которые я создаю, которые работают с управлением памятью, слабыми ссылками и ID на основе памяти.
Надеюсь, это поможет вам.
До свидания, и удачи, мой друг!