4

に関するスレッドの私の理解は、NSManagedObjectContextそれが作成されたスレッドでのみコアデータのフェッチ要求、削除などを実行できるということです。NSManagedObjectContextが作成されたスレッドを確認する方法、または実行の特定の時点で現在のスレッドが特定のスレッドであるかどうかを確認する方法はありますNSManagedObjectContextか?

ありがとう!

4

3 に答える 3

2

NSManagedObjectContext に関するスレッドの私の理解は、それが作成されたスレッドでのみコア データのフェッチ要求、削除などを実行できるということです。

それは本当に正確ではありません。コンテキストは、複数のスレッドまたはキューで同時に使用できないと言ったほうがよいでしょう。これに対処するための一般的なアプローチは、スレッド/キューごとに異なるコンテキストを作成することです。performBlockおよびperformBlockAndWaitメソッドを使用して、コンテキストへのアクセスを効果的にシングルスレッドに保ちながら、複数のスレッドでコンテキストを使用することもできます。

その結果、コンテキストには、スレッドまたはキューに属するという概念がなく、スレッドで作成されたコンテキストへの参照もありません。

スレッドまたはキューごとに 1 つのコンテキストのアプローチに従う場合は、コードが実行される場所を追跡し、適切なコンテキストを使用する必要があります。たとえば、GCD を使用する場合、特定のディスパッチ キューのコンテキストを作成し、dispatch_asyncそのキューで実行するようなものを使用した場合にのみ使用します。

コンテキストをキューに本当にリンクしたい場合は、独自のデータ構造を使用して、使用している同時実行スキームからコンテキストを検索できます-現在のNSOperationQueue、またはディスパッチキュー、NSThreadまたは何でも。これが必要になることはめったにありませんが、より良いテクニックが見つからない場合は可能です。

于 2013-08-23T23:05:21.100 に答える
1

私の知る限り、あなたはできません。少なくとも簡単ではありません。なんで?使用-performBlock:- 正しいスレッドですべてのリクエストを実行します。

于 2013-08-23T23:05:01.300 に答える