Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 在核心数据中并发枚举托管对象是线程安全的吗_Core Data_Thread Safety_Enumeration_Nsmanagedobjectcontext_Nsarraycontroller - Fatal编程技术网

Core data 在核心数据中并发枚举托管对象是线程安全的吗

Core data 在核心数据中并发枚举托管对象是线程安全的吗,core-data,thread-safety,enumeration,nsmanagedobjectcontext,nsarraycontroller,Core Data,Thread Safety,Enumeration,Nsmanagedobjectcontext,Nsarraycontroller,我需要更新核心数据中每个排列对象的值,我目前正在使用循环。但是我想知道下面的代码是否是线程安全的,以及为什么 ManagedObjectContext不是线程安全的,解释道 从某种意义上讲是安全的,虽然块的多个副本可以同时运行,但它们都在处理不同的对象。当然,假设对setValue:forKey:的调用对集合中的其他对象没有副作用 如果另一个线程或队列试图访问此集合中的对象,则无法阻止它在同一时间与同一对象发生冲突,这是不安全的。块不会锁定其他位置的其他操作,因此如果您可能同时在其他位置使用这些

我需要更新核心数据中每个排列对象的值,我目前正在使用循环。但是我想知道下面的代码是否是线程安全的,以及为什么

ManagedObjectContext不是线程安全的,解释道

从某种意义上讲是安全的,虽然块的多个副本可以同时运行,但它们都在处理不同的对象。当然,假设对
setValue:forKey:
的调用对集合中的其他对象没有副作用

如果另一个线程或队列试图访问此集合中的对象,则无法阻止它在同一时间与同一对象发生冲突,这是不安全的。块不会锁定其他位置的其他操作,因此如果您可能同时在其他位置使用这些对象,则需要采取更多预防措施

[myArrayController.arrangedObjects enumerateObjectsWithOptions:NSEnumerationConcurrent 
                                                    usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

    // do some work

    [obj setValue:@"some value" forKey:@"aKey"];            
}]