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:時對集合中的其他對象沒有副作用,當然。

這是不安全從這個意義上說,如果另一個線程或隊列試圖訪問此集合中的對象,沒有什麼可以阻止它在同一時間混淆同一個對象。該塊不會鎖定其他地方的其他動作,因此如果您可能在同一時間在其他地方使用這些對象,則需要更多預防措施。