事件链或堆栈太长了3

时间:2012-01-06 18:25:59

标签: ios actionscript-3 events

我不认为“链”是正确的词。但这是我的问题:

我有1000个需要下载的项目。

我使用带有事件的加载器:Event.COMPLETE调用一个函数。 此函数创建一个带有事件的加载器,该事件在Event.COMPLETE上再次调用该函数......等等。

这从来都不是问题。我甚至都不知道这意味着它会全部堆积在内存中。

在iOS上,这被证明是一个问题。在某个最大值,它只是告诉我,我已达到极限。所以在500我插入一个Timer,这样我就可以再次从“0级”开始调用这些函数。

现在,我认为我的架构在这里是错误的。有什么更好的方法来实现这一目标?

3 个答案:

答案 0 :(得分:0)

您实际上是使用递归调用来执行操作,这会在堆栈上留下内存。 (这通常用C语言和C ++等语言覆盖较低级别。)您需要将函数重写为迭代调用,以便它们自动从堆栈中删除 - 您可以尝试for循环或类似的东西。

发布你的代码 - 我会重写一个可能适合你的替代方案。

答案 1 :(得分:0)

首先:为什么需要下载1000件物品? 你还必须同时展示这些项目吗?

建议1)
也许可以将它们组合成一个* .zip文件并下载这一个文件是一个选项...... (http://ntt.cc/2008/01/19/actionscript-class-library-fzip.html
解压缩并在本地访问文件。

建议2)
如果没有,也许你可以在完全加载文件后重用现有的Loader实例。并将结果保存在其他地方

建议3)
也许问题是,旧的Loader实例不会从内存中删除。请记住从Loader中删除所有eventlisteners,以便GC可以处理它们。

答案 2 :(得分:0)

https://bugbase.adobe.com/index.cfm?event=bug&id=3071138不幸的是,不得不多次发布这个帖子。这个井可能是Loader的错误。在任何情况下,iOS目标都非常新鲜,并且可能比其他目标更加错误。

然而,这不是堆栈溢出错误,因为响应于loader的“complete”事件而调用的事件处理程序是异步的(每个事件处理程序都打开一个新的堆栈帧)。我不确定目前是否有可能解决这个问题。