我有一个controller
它拥有一个阵列actors
。演员是一个将由controller
调用的对象。如何安全地循环修改可变数组?
问题:controller
遍历actors
数组并发送给每个角色-actionMessage
。演员可以使用controller
创建并注册另一个演员,或者从控制器的演员阵列中删除演员或者甚至自己。它是通过两种方式进行连接:
-registerActor:(Actor*)actor;
-unregisterActor:(Actor*)actor;
所以当控制器遍历演员阵列,演员名单可以更改。 编辑:任何新添加的actor都必须通过循环。
解决此问题的最佳做法是什么?我应该在迭代之前创建actors数组的副本吗?
就我而言,这是唯一真正理智的答案。替代品大多是黑客(有些人完全忽略了如果这是唯一的修改发生,你可以使用'NS [Mutable] IndexSet'去除循环后的项目)。这不是特别愉快,但它是处理这种情况最安全的方法。 – nil
我更新了这个问题以反映这一点:当添加一个Actor时,循环也必须处理它。与副本我不会处理新添加的演员。那么一个Set是更好的选项,可以将变异数组中所有不在处理集合中的actor都区分开来,让循环遍历它们呢? –