从不同的线程访问NSMutableArray中具有不同索引的对象是否安全



我有一个包含一些对象的NSMutableArray,我知道NSMutableArray不是线程安全类。我想知道从不同的线程访问该数组中的每个对象是否可以,如下所示:

for (int i = 0; i < muArr.count; i++) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
muArr[i] = [[NSObject alloc] init];
});
}

您的代码片段不是在访问数组中的每个对象(muArr(,而是在设置。"非线程安全"的定义排除了保证安全的写访问。。。

当您使用dispatch时,您可以做的是创建对可变数组的受控访问,类似于:

  • 创建一个并发调度队列与数组一起使用
  • 写入操作可以作为异步屏障操作分派到此队列
  • 读取操作是同步操作
  • 如果愿意,您可以将其封装在NSMutableArray的子类中,只需遵循文档中给出的子类化要求即可

如果你在设计和实现这样的东西时遇到了困难,请提出一个新问题(在首先检查SO和其他来源之后(,展示你的代码并解释你的问题,肯定会有人帮你。

HTH-

最新更新