0

我使用 ActionScript3 开发网页和手机游戏。记忆是我最大的敌人,我总是不知道一些物体的细节寿命。例如:Bitmap 我知道bitmapData 有一个“处理”功能。因此,我总是使用“bitmap.bitmapData.dispose”来处理位图对象。但是,我想知道如果位图对象的引用变为0,即使我不调用dispose函数,GC也会释放该对象使用的内存。

我有太多像上面这样的问题(声音、纹理、BaseTexture ...)。有没有人对这个话题有一些想法?

4

1 回答 1

0

对象的生命周期由一件事决定——如果不再从任何地方引用它,它就被认为是死的(孤立的)并且是一个从内存中删除的主题。dispose()所以是的,如果您删除对它的所有引用,即使没有显式调用,BitmapData 对象也会从内存中删除。

关于声音或纹理对象 - 这些最好重复使用,例如,您可以mySound.play()多次调用,这将生成一个单独的SoundChannel对象,其生命周期大约是声音的持续时间,如果它没有被引用。同样,您可以使用相同的 Texture 对象来拥有多个被纹理化的东西的实例。

对于那些扩展的类有一个特殊的规则EventDispatcher,因为它们可以监听事件,如果你不使用对该对象的弱引用,事件监听器会直接附加到实例上,从而创建一个额外的引用链接,这将有效地禁止GC 从回收该对象占用的内存。因此,您应该始终完全控制所有强引用侦听器,至少为此目的。

希望这可以帮助。

于 2013-03-13T05:34:33.547 回答