看起来只是简单地新建一个 as3 声音对象,并将其引用设置回 null 会造成内存泄漏,无论它是否已用于在其上播放 SoundChannel。
例如,使用下一个文本代码:
package
{
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.system.*;
import flash.utils.*;
import flash.system.*;
public class Main extends Sprite
{
[Embed(source = "../data/SongScene8.mp3")] protected var SongScene8:Class;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
System.gc();
trace("Before");
trace(System.totalMemory);
trace("_________________")
var sound:Sound = new SongScene8();
System.gc();
trace("After new");
trace(System.totalMemory);
trace("_________________")
sound = null;
System.gc();
trace("After null");
trace(System.totalMemory);
}
}
}
输出是:
之前 3461120
后新3604480
空后 3604480
即使 gc 运行一千次,最后一个值仍然存在。
因此,无论是否播放声道,看起来声音对象都无法从内存中删除。
请说我错了,并告诉我为什么。提前致谢。