flex – 如何在ActionScript中获取实例的“内存位置”?
FlexBuilder的调试器将向您显示任何范围内实例的“内存位置”(或者,我只能假设大致类似的东西):
但我想在代码中获得这些信息(类似于Python的id函数),所以我可以很容易地跟踪对象如何通过系统。例如,我可能有: trace("Returning",id(foo)); 然后在其他地方我可以使用: trace("Using",id(foo)); 以确保代码的两个位都处理同一个实例。 现在,我知道许多AS类实现了IUID接口…但是也有一些类不(例如,旧的数组和对象),所以这不会解决我的问题。 我意识到,我也可以包装ObjectProxy中的对象,但这也不太理想。 解决方法
在现实中,我建议你不要使用太多…它是非常昂贵的。 Adobe需要创建一个本地函数来返回给我们。
但是,现在…尝试这: 你需要引起明确的强制才能得到它! TypeError: Error #1034: Type Coercion failed: cannot convert Main@1c49d31 to flash.utils.ByteArray. 注意,在这个错误,你得到你想要的… @ 1c49d31。这个哈希像内存分配中的ID。 我做了很多测试。这个哈希只是改变当你调用一个“新”(在C语言等效于[[… alloc] init])和静态函数和静态属性,分配发生一点不同…反正… 回到Flash,问题是我们没有一个直接的方法来获取这个散列没有错误。 但这不是一个真实的大问题。所有你需要的是使用一些“try”和“catch” 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 { } 有关这方面的一点解释: 这个小代码对我来说很好!现在我可以完成一些伟大的引擎,我使用内存管理,弱引用和基于内存的ID。 我希望这可以帮助你。 再见,祝你好运,我的朋友! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |