1 つのスレッドだけで実行される GCD キューを作成する方法はありますか? そのキューを使用して Core Data 操作を処理したいと考えています。
2 に答える
はい; フラグを付けてキューを作成するだけDISPATCH_QUEUE_SERIAL
です (これもデフォルトです)。ただし、コア データ操作を別のスレッドに移動する場合は注意してください。givenNSManagedObjectContext
は 1 つのスレッドでのみ使用する必要があるため、メイン スレッド用とバックグラウンド スレッド用の 2 つのコンテキストが必要になります。これを正しく行うには、注意が必要な場合があります。
UIManagedDocument
(これが iOS5 の場合)調査することをお勧めします。少なくとも、そのドキュメントを読んで、マルチスレッドでの親コンテキストと子コンテキストの使用について学ぶ必要があります。
管理オブジェクト コンテキストが作成されるとき、その同時実行タイプを指定します。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 を呼び出すことはできません。作成とすべての作業は同じスレッドで行う必要があります。その場合のみ、独自のキューを作成する必要があります。