1

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

为了看到它,我正在使用 scout。在内存部分,Bitmap DisplayObjects 是空闲的,但 Images 部分不是。

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

我应该怎么做才能释放这部分内存?

谢谢

编辑2(忘记加载器之前的_):这是我为释放加载器所做的:

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

编辑 3:我的内存泄漏仍然需要帮助,谢谢

4

1 回答 1

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

现在应该在下一次垃圾收集器运行时从内存中删除加载程序。只需确保您已清除所有侦听器和引用。

希望有帮助!

于 2013-08-15T09:47:44.777 回答