1

我想知道卸载 swf 后有办法删除所有数据。

调用 Loader.unloadAndStop(); 删除内容和加载的字节,但加载的类留在应用程序域中。

如果我将它加载到单独的新 ApplicationDomain 中,gc 将在卸载后收集它们并删除所有引用?

4

1 回答 1

1

对于初学者,您加载到域中的类在卸载时不会留在内存中,除非您保留引用。所以,如果你做了类似的事情:

private static var foo:Class = 
    loadedSWF.loaderInfo.applicationDomain.getDefinition("Foo");

然后,显然,它将留在内存中。还有一些其他的事情需要注意,根据播放器版本的不同registerClassAlias(),如果从加载的 SWF 调用它,别名将在父域中注册,因此以后无法卸载该类,除非您为另一个类注册了相同的别名。在后来的一些版本中,但不是最后一个版本,它会在正确的域中正确注册类,但它破坏了一些人的代码......叹息,今天的行为有点不可预测,它会尝试决定尝试注册的域基于该类的别名在该域中使用,当然,在运行时可能会有所不同......

于 2011-10-22T11:40:41.297 回答