我有一个包含一些对象的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-