从主SWF发布应用程序域

时间:2011-10-22 10:25:35

标签: flash actionscript-3 garbage-collection applicationdomain

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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