我需要为Core Data中的每个排列对象更新一个值,而我目前正在使用循环。但我想知道以下代码是否是线程安全的,为什么。
ManagedObjectContext不是线程安全的,解释here
[myArrayController.arrangedObjects enumerateObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// do some work
[obj setValue:@"some value" forKey:@"aKey"];
}]
答案 0 :(得分:0)
它是安全的,因为虽然块的多个副本可以同时运行,但它们都在处理不同的对象。假设您对setValue:forKey:
的调用对集合中的其他对象没有副作用,当然。
不安全在某种意义上说,如果另一个线程或队列试图访问此集合中的对象,那么就没有什么可以阻止它同时弄乱同一个对象。该块不会锁定其他地方的其他操作,因此如果您可能同时在其他地方使用这些对象,则需要采取更多预防措施。