我有一个包含数组的类。我似乎能够从多个类中操作该数组,但它并非没有错误。在我的调试工作中,我遇到this,这让我觉得我正在尝试做的是“错误的”方式。我是否理解我可以从多个类访问一个数组(通过getter / setter函数或使其成为公共属性)但是如果它被一个帧中的2个不同的类操作/循环/勾选,数组“引用”(或其他)在所有“引用”中都不是最新的?
如果我理解正确的话,一个简单的“是”就行了。如果我遗失了什么,请帮忙。
有关如何构建程序的任何提示,以免您遇到此类问题?
答案 0 :(得分:2)
没有。 AS3主循环是同步的,因此您不能同时设置两个不同的类冲突,除非它们在决定要更改的内容时都不会使用其当前状态,例如存储基于操作的操作在将控制权返回给主事件循环之后要对该数组做的数据。否则,如果在多个类/实例中有多个事件侦听器都监听同一事件,则它们都会以某种方式排队(详细信息取决于添加事件侦听器顺序,显示列表结构,捕获/冒泡的监听器类型,如果适用)等,当某个类运行其事件监听器时,可以确定所讨论的数组不会被操纵,而是自己的事件监听器。因此,对于普通的事件监听器,您可以安全地对任何类型的共享变量使用简单的访问模型。
Worker
是另一回事,它们使用单独的线程,因此是真正的并行,因此需要额外的安全性来规划和实现访问同一实体以进行读写的并行进程。
更新:我已阅读推荐的答案并发现它令人困惑。这意味着如果您不根据某些全局变量的内容定期更新某些内容,则必须告诉显示实体,如果您需要立即更新全局数据,则已更改全局数据。这不是确切的冲突,而是如果您的视图未从模型更新其数据,则跨应用程序的状态不一致。它实际上是一种设计缺陷,而不是实际的访问冲突。跳过它。