Loader方法unloadAndStop()行为

时间:2013-07-07 16:08:01

标签: actionscript-3 loader

使用加载器时遇到了一些问题,我觉得我需要完全理解unloadAndStop()方法的工作原理。我正在研究一个在运行时需要时加载多个swfs的项目。为此,我一直在使用单个加载器,并在完成后将其内容提取到缓存中。

单个加载器是通过我尚未编写的扩展类实现的,并且在加载新的URLRequest时似乎实现了“unloadAndStop(true)方法。”

现在,我在使用这个系统时遇到了一些奇怪的问题,我已经将它追溯到unloadAndStop(true)调用,根据Adobe文档,它会停止音频,回放和标记以便由垃圾收集器删除。显然这不是我想要的;我仍然在舞台上和缓存中引用了这个对象!我觉得有一种方法可以用这种方式直接标记垃圾收集,据我所知,没有别的方法可以做到这一点。

这使我假设为了正确删除加载了加载程序的东西,你以这种方式卸载它。是这样的吗?如果我加载内容,将其内容提取到movieClip1,加载一个新的movieClip,然后删除所有对movieClip1(原始Loader内容)的引用将被垃圾收集,还是必须通过unloadAndStop方法删除?

TL; DR:

是否有必要从加载程序调用unloadAndStop(true)以保证从内存中删除已加载的任何内容,或者加载程序是否可以加载另一个URLRequest而不用担心内存泄漏?

1 个答案:

答案 0 :(得分:0)

在文档中有详细描述:

gc:Boolean(default = true) - 提供垃圾收集器的提示,以便在子SWF对象上运行(true)或不运行(false)。如果要异步卸载许多对象,将gc参数设置为false可能会提高应用程序性能。但是,如果参数设置为false,则在运行unloadAndStop()命令后,子SWF文件的介质和显示对象可能会在内存中保留。

这是因为你可以拥有一些SWF,获得一些特定的孩子,并删除SWF。但你继续引用它的孩子,这意味着孩子不会被垃圾收集。但是如果你强制GC检查孩子,它会尝试将所有这些标记为收集,并留下使用的那些。

所以基本上,没有必要强制GC来清理东西。最好也是最重要的做法是从Stage中删除所有内容,并清除对它的所有引用。它迟早会被GC检查。 unloadAndStop是一个不能跟踪他正在做什么的人的捷径,只是一个安全措施,以确保你尽可能多地清理。

我个人不使用它。