我们可以允许从两个线程同时操作 NSMutableArray 的不同 "indexes"

Can we allow different "indexes" of a NSMutableArray to be manipulated simultaneously from two threads

NSMutableArray 不是线程安全的,但我不明白为什么只要同时操作不同的索引,它们就不能设计为线程安全的。例如。索引 1 指向 class X 的一个实例,索引 2 指向另一个实例。允许同时操作这两个对象不是很高效吗?当我使用 GCD 时是否允许这样做,或者当我更改不同索引指向的对象时是否需要使用调度屏障?

这样想。

您的数组包含指向对象的指针。指针本质上是路标,指向对象在内存中的位置。

现在,当您改变一个对象时,您实际上并没有触及任何指向该对象的指针。对象在内存中的位置不受影响。

因此,从数组的角度来看,当您改变数组中的对象本身时,什么都不会发生,因为指针不受影响。 这意味着从不同线程改变数组中的不同对象是完全安全的。

因此,当您说将数据并行下载到数组中的不同对象中效率更高时,您是对的。

只要你不改变数组本身(添加或删除对象)改变对象并发,没问题

如果你需要同时从多个线程改变数组,你说得对,你应该使用并发队列,写入障碍和标准分派阅读。这将允许多个并发读取(这是非常安全的)并将写入与读取序列化。