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 に答える