“非动态子代”是指另一个库符号预编译的子代,例如,其中一个库符号 MC_1 包含一个实例 MC_2 - MC_1 是为动作脚本导出的,而 MC_1 是通过使用它的实例名称来寻址的(比如说 instance_1 )。在这种情况下,MC_2 是否仍会获得对 MC_1 的 this.parent 引用,这会束缚它并阻止垃圾收集器执行其业务?我是否必须(在 MC_1 的 AS3 文件中)removeChild(instance_1) 并将 instance_1 设置为 null?即使 MC_2 没有在代码中给出任何引用?
我对垃圾收集的了解(在我读过的 20 多篇文章中无济于事)告诉我答案可能是我不必删除这些引用,但我问是因为这是我唯一的事情没试过。
我在游戏中有一个 DocumentClass current_screen 变量,它通过每个类级联一个 destructor() 函数(大多数类都有自己的 destructor()),只要屏幕发生变化(也从显示列表中删除 current_screen 并将其设置为 null)。级联析构函数删除一个类的子级、所有它的侦听器并将其所有对象变量引用设置为 null(包括数组中的那些)。然而,每次创建新屏幕时内存使用量仍会稳步增加(current_screen = new Screen()),这表明它没有被正确地垃圾收集(最终导致滞后)。我不知道在析构函数类中我还能做什么,除了出于绝望开始删除纯图形的非动态子代。