0

我需要更新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

这是安全在这个意义上,而块的多个副本可以同时运行,它们都致力于不同的对象。假设您拨打setValue:forKey:时对集合中的其他对象没有副作用,当然。

这是不安全从这个意义上说,如果另一个线程或队列试图访问此集合中的对象,没有什么可以阻止它在同一时间混淆同一个对象。该块不会锁定其他地方的其他动作,因此如果您可能在同一时间在其他地方使用这些对象,则需要更多预防措施。