0

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

ManagedObjectContext 不是线程安全的,这里解释

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

    // do some work

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

1 回答 1

0

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

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

于 2013-04-06T18:13:22.620 回答