8

NSOperationQueueを使用して CoreData 操作をディスパッチしたいと考えています。ただし、オペレーション キューの動作は常に同じではなく (たとえば、libdispatchスレッド プールを使用する iOS 4.0/OS 10.6 でディスパッチする)、キューが常に同じスレッドを使用するとは限りません (NSManagedObjectContext必要に応じて)。

シリアルNSOperationQueueを単一のスレッドで強制的に実行できますか? それとも、そのために独自の単純なキューイングメカニズムを作成する必要がありますか?

4

2 に答える 2

4

シリアル NSOperationQueue を強制的に単一のスレッドで実行することはできますか? それとも、そのために独自の単純なキューイングメカニズムを作成する必要がありますか?

これらのいずれかを行う必要はありません。Core Data が実際に必要とするのは、管理対象オブジェクト コンテキストを同時に変更する 2 つのコードを持たないことです。Concurrency with Core Dataの冒頭にも、これに関するメモがあります。

注:同時実行には、スレッド、シリアル操作キュー、またはディスパッチ キューを使用できます。簡潔にするために、この記事では全体を通して「スレッド」を使用してこれらのいずれかを参照します。

本当に必要なのは、特定のコンテキストで操作をシリアル化することです。これは、単一のスレッドを使用する場合は当然のことですが、maxConcurrentOperationCount1 に設定すると NSOperationQueue もその操作をシリアル化するため、すべての操作が同じスレッドで行われることを保証することについて心配する必要はありません。

于 2012-07-15T02:27:45.823 に答える
0

Apple はマネージド オブジェクトを実際のスレッドにバインドすることを決定しました。別のスレッドでコンテキストにアクセスすることはもはや安全ではありません。オブジェクトのないコンテキストは安全かもしれませんが、そのオブジェクトは安全ではありません。

于 2012-11-02T08:53:51.183 に答える