我已经知道基于时间线编程的所有问题,但我很想知道在这种情况下垃圾收集器会发生什么。
谈论时间轴中的代码 - 如果代码不在同一帧中,则无法访问电影剪辑,这是否会增加内存泄漏的可能性?
在我看来,当“播放头”当前位于其帧上时,时间轴中的影片剪辑被添加,并在它消失时被删除。
我已经知道基于时间线编程的所有问题,但我很想知道在这种情况下垃圾收集器会发生什么。
谈论时间轴中的代码 - 如果代码不在同一帧中,则无法访问电影剪辑,这是否会增加内存泄漏的可能性?
在我看来,当“播放头”当前位于其帧上时,时间轴中的影片剪辑被添加,并在它消失时被删除。
如果出现以下情况,垃圾收集器将无法清理/处理从舞台上移除的影片剪辑:
该剪辑仍在播放并做一些事情(创建/删除其他事情......)
该剪辑仍被其他一些“可访问”的实例引用
您尝试删除包含太多项目的过于复杂的层次结构[我没有任何数字,但我猜大约 2^32 个项目?]
我通常用来查看是否存在内存泄漏的一种方法是在 FlashDevelop 中运行 SWF Profiler 并强制 GC 在某些情况下运行并查看哪些内容被删除。
请查看以下文章以获取更多信息:
http://active.tutsplus.com/tutorials/workflow/quick-tip-understanding-garbage-collection-in-as3/
该代码仍然是该影片剪辑的一部分。所以它仍然存在。并且由于假定MovieClip仍附加到其父级,因此它保持不变。
(我说附加到其父级而不是屏幕上,因为它可能让父级引用子级,而子级使用 .parent 变量引用父级,因此由于它们都有指向它们的东西,它们会留在内存中)。