コアデータをマルチスレッド化するためのAppleの推奨方法は、スレッドごとに管理対象オブジェクトコンテキストを使用し、変更されたスレッドのコンテキストを共有永続ストアに保存することで、あるコンテキストから別のコンテキストに変更を送信することです。
私はそれがうまくいくことを想像することができますが、例えば。RSSリーダー、一部のアプリケーションでは、理想からはほど遠いようです。私の場合、バックグラウンドスレッドを使用してデータを記録および再生するミュージックシーケンサーを作成しています。記録/再生中にメインスレッドにアクセスできるように、記録されたデータが必要です。記録/再生中に常にデータを保存およびロードしなければならないことは十分に悪いことですが、さらに悪いことに、ユーザーが記録または再生するたびに保存を強制するように思われ、「ひどいアプリケーション」と叫びます。
ただし、これを回避する方法があるようです。他のスレッドがコアデータエンティティ自体(それらに含まれるデータのみ)にアクセスする必要がない場合、管理対象オブジェクトコンテキストを独自のスレッドで実行し、UIをバインドするなどして他のスレッドに間接アクセスのみを許可するのを防ぐにはどうすればよいですか?performSelector:onThread:withObject:waitUntilDone:
管理対象オブジェクトコンテキストのスレッドを呼び出して値を取得/設定するプロパティへのオブジェクト?
マルチスレッド(つまり、コアデータをマルチコアCPUにスケーリングする)の利点の一部は提供されませんが、多くの場合、集中的な処理が行われているときにUIがロックされないようにマルチスレッドが必要です。
このパターンがコアデータに推奨されているのを見たことがありません。アップルが提案することを正確に行わないと、奇妙で予測不可能な獣になる可能性があることを考えると、複数のスレッドが単一の管理対象オブジェクトコンテキストにアクセスすることを思いとどまらせる理由を本当に回避できるかどうかを尋ねる価値があると思いました。