2012-05-02 7 views

答えて

4

はい、フラグDISPATCH_QUEUE_SERIALを持つキューを作成してください(これもデフォルトです)。しかし、コアデータ操作を別のスレッドに移動するように注意してください。与えられたNSManagedObjectContextは、1つのスレッドでのみ使用する必要があるため、メインスレッド用とバックグラウンドスレッド用の2つのコンテキストが必要です。これを正しく行うには注意が必要です。

UIManagedDocument(これがiOS5の場合)を調べることができます。これがこの作業の多くを行います。少なくとも、マルチスレッド化のための親子コンテキストの使用方法を学ぶために、そのドキュメントを読むべきです。

+0

この回答は古くなっているようです。ドキュメントから: "シリアルキュー(プライベートディスパッチキューとも呼ばれます)は、キューに追加された順に一度に1つのタスクを実行します。現在実行中のタスクは、タスクto task **)がディスパッチキュー " – Andreas

0

管理オブジェクトコンテキストを作成するときは、その並行処理タイプを指定します。 NSPrivateQueueConcurrencyTypeまたはNSMainQueueConcurrencyTypeを指定すると、MOCはすでに独自のスレッドで実行しています。具体的に...

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
// Do other MOC initializations stuff... 
[moc.performBlock:^{ 
    // All code in this block will run in the proper thread for the Managed Object Context. 
}]; 

FWIW、NSMainQueueConcurrencyTypeは同じように動作しますが、それがメインキューに取り付けられています。 NSConfinementConcurrencyTypeで作成されたMOCでperformBlockを呼び出すことはできません。作成とすべての作業は同じスレッドで行われなければなりません。その場合にのみ、独自のキューを作成する必要があります。

関連する問題