我使用 ActionScript3 开发网页和手机游戏。记忆是我最大的敌人,我总是不知道一些物体的细节寿命。例如:Bitmap 我知道bitmapData 有一个“处理”功能。因此,我总是使用“bitmap.bitmapData.dispose”来处理位图对象。但是,我想知道如果位图对象的引用变为0,即使我不调用dispose函数,GC也会释放该对象使用的内存。
我有太多像上面这样的问题(声音、纹理、BaseTexture ...)。有没有人对这个话题有一些想法?
我使用 ActionScript3 开发网页和手机游戏。记忆是我最大的敌人,我总是不知道一些物体的细节寿命。例如:Bitmap 我知道bitmapData 有一个“处理”功能。因此,我总是使用“bitmap.bitmapData.dispose”来处理位图对象。但是,我想知道如果位图对象的引用变为0,即使我不调用dispose函数,GC也会释放该对象使用的内存。
我有太多像上面这样的问题(声音、纹理、BaseTexture ...)。有没有人对这个话题有一些想法?
对象的生命周期由一件事决定——如果不再从任何地方引用它,它就被认为是死的(孤立的)并且是一个从内存中删除的主题。dispose()
所以是的,如果您删除对它的所有引用,即使没有显式调用,BitmapData 对象也会从内存中删除。
关于声音或纹理对象 - 这些最好重复使用,例如,您可以mySound.play()
多次调用,这将生成一个单独的SoundChannel
对象,其生命周期大约是声音的持续时间,如果它没有被引用。同样,您可以使用相同的 Texture 对象来拥有多个被纹理化的东西的实例。
对于那些扩展的类有一个特殊的规则EventDispatcher
,因为它们可以监听事件,如果你不使用对该对象的弱引用,事件监听器会直接附加到实例上,从而创建一个额外的引用链接,这将有效地禁止GC 从回收该对象占用的内存。因此,您应该始终完全控制所有强引用侦听器,至少为此目的。
希望这可以帮助。