私がやろうとしていることは次のとおりです。
Product *product = [fetchResult lastObject];
NSString *productID = product.atProductID;
dispatch_async(queue, ^(void){
// Something with productID like
NSLog(@"productID is %@", productID);
});
このようにしても安全ですか、それともセカンダリ キュー用に別のコンテキストを作成し、内部 ID で製品を取得してから、その atProductID 属性を処理する必要がありますか?
更新: まあ、実際には安全ではないことが明らかになりました。簡単な解決策の 1 つは、productID 文字列のコピーを作成することです。
Product *product = [fetchResult lastObject];
NSString *productID = [product.atProductID copy];
dispatch_async(queue, ^(void){
// Something with productID like
NSLog(@"productID is %@", productID);
});
バックグラウンドスレッドでコンテキストまたはその派生物への参照を保持しないため、これは安全です。これは、コンテキストが永続ストアからフェッチしたデータをキャッシュし、それ自体がそのキャッシュを管理するためです。また、そのキャッシュへのポインターを保持するかどうかに関係なく、コンテキストのスレッドで使用されない限り、変更または破棄される可能性があります。