[AS3]内存使用Loader加载的压缩图像泄漏

时间:2013-06-19 13:30:32

标签: actionscript-3 flash memory-leaks adobe-scout

我实际上正在使用Loader类从远程服务器获取图像。 我正在使用它作为工作,当它完成后我将它从内存中删除但是有一点泄漏。

要看到它,我正在使用侦察兵。在内存部分,Bitmap DisplayObjects是免费的,但Images部分不是。

当我查看侦察文档时,我发现Images部分是我正在加载的文件的压缩版本。

我应该怎样做才能释放这段记忆?

感谢

编辑2(忘记加载前的_): 以下是我为释放Loader所做的工作:

(_loader.content as Bitmap).bitmapData.dispose();
_loader.unload();
this.removeChild(_loader);
_loader = null;

编辑3: 我仍然需要帮助解决内存泄漏问题,谢谢

1 个答案:

答案 0 :(得分:0)

使用Loader类时很容易出现内存泄漏。 要使垃圾收集器从内存中删除对象,必须遵循以下规则:

  • 该对象没有引用
  • 该对象没有事件侦听器(或者事件侦听器将WeakReference设置为true)
  • 该对象未包含在任何数组

以下是使用Loader的一个小例子

var urlReq:URLRequest = new URLRequest("url here");

var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
l.load(urlReq);
看起来很简单,不是吗? ;)我没有包含处理程序,因为它对这个例子并不重要。

现在让我们删除它:

l.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaded);
//the LoaderInfo object is inside the Loader object, it needs to be free of listeners
//or it won't let the Loader object to be garbage collected

var content:DisplayObject = l.content; // save the loaded item
l = null; // make object NULL

现在应该在下一次垃圾收集器运行时从内存中删除加载器。只要确保你已经清除了所有的听众和参考文献。

希望有所帮助!