0

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

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

现在,我在使用这个系统时遇到了一些奇怪的问题,我将其追溯到 unloadAndStop(true) 调用,根据 Adob​​e 文档,该调用会停止音频、播放和标志,以供垃圾收集器删除。显然这不是我想要的;我仍然在舞台上和我的缓存中引用了这个对象!对我来说似乎很奇怪,有一种方法可以以这种方式直接标记垃圾收集,据我所知,没有其他方法可以做到这一点。

所以这让我假设为了正确地移除装载装载机的东西,你必须以这种方式卸载它。是这样吗?如果我加载某些内容,将其内容拉出到movieClip1,加载新的movieClip,然后删除对movieClip1的所有引用(原始Loader内容)将被垃圾收集,还是必须通过unloadAndStop方法删除?

TL;博士:

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

4

1 回答 1

0

在文档中有很好的描述:

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

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

所以基本上,没有必要强制 GC 来清理东西。最好和最重要的做法是从 Stage 中删除所有内容,并清除对其的所有引用。它迟早会被GC检查。unloadAndStop对于不知道自己在做什么的人来说,这是一条捷径,只是一种确保您已尽可能多地清洁的安全措​​施。

我个人不使用它。

于 2014-04-09T08:41:21.320 回答