主题1:
self.array = [[NSMutableArray alloc] init];
/* load array */
主题2:
for (NSObject* object in self.array) {
/* do stuff */
}
这样安全吗?在for:in循环期间何时以及多久访问一次self.array?
如果我重新分配self.array,在循环期间,线程2会继续和平地循环遍历旧实例,还是会切换到新实例,可能会导致突变异常?
答案 0 :(得分:1)
在for/in
循环中,集合是一个表达式。在您的情况下,该表达式为self.array
。程序在循环开始时计算该表达式的值一次。在您的情况下,它会在循环开始时调用self.array
一次。
在循环执行时,您可以安全地将self.array
替换为另一个数组。
不能做的是在循环执行时就地修改数组。也就是说,您不能将一个元素替换为另一个元素,或添加元素或删除元素。如果这样做,您将收到运行时错误(因为NSFastEnumeration
中的NSArray
实现明确检查了突变。)