我想知道在卸载swf后有办法删除所有数据。
调用Loader.unloadAndStop();删除内容和加载的字节,但加载的类保留在应用程序域中。
如果我将它加载到分离的新ApplicationDomain,gc将在卸载后收集它们并删除所有引用?
答案 0 :(得分:1)
对于初学者,加载到域中的类在卸载时不会保留在内存中,除非您保留引用。所以,如果你做了类似的事情:
private static var foo:Class =
loadedSWF.loaderInfo.applicationDomain.getDefinition("Foo");
然后,显然,它会留在记忆中。还有一些需要注意的事情,取决于播放器版本,registerClassAlias()
的行为改变了如果从加载的SWF中调用它,别名将在父域中注册,因此会除非你为另一个类注册相同的别名,否则以后再也无法卸载该类。在一些以后,但不是最后一个版本,它将正确地注册正确的域中的类,但它打破了一些人的代码...... 叹息今天行为有点不可预测,它会尝试根据该类在该域中使用的内容,确定哪个域尝试注册别名,当然,这可能在运行时有所不同......