2016-07-02 11 views
0

performBlockを使用してプライベートコンテキストでCoreData(CRUD)操作をトリガし、dispatch_asyncバックグラウンドキューのメインコンテキストを使用してこのような操作をトリガするのに違いはありますか?CoreDataとNSManagedObject Context - プライベート対メイン

バックグラウンドスレッドでメインコンテキストを使用しないでください。

apple docsへのリンクはhereです。

答えて

3

は、バックグラウンドスレッドでメインキューコンテキストを使用します。これはスレッドの閉じ込めルールに違反します。

メインキューコンテキストは、すべてメインキュー(UIキュー/スレッド)またはperformBlockからのみアクセスする必要があります。 UI以外の関連タスクを実行する必要がある場合は、プライベートキューコンテキストを作成し、performBlock経由でアクセスする必要があります。

コアデータのスレッドが正しいことを確認するには、-com.apple.CoreData.ConcurrencyDebug 1実行時設定を有効にすることができます。

+0

私はそれを得る。しかし、私は2つのオプションをテストし、両方とも動作するようです。ですから、私の質問は、これが禁止されたアプローチがうまくいくかどうかです。 – goggelj

+0

これはスレッドの違反です。つまり、ほとんどの場合*動作し、データ破損のリスクが高いプロダクションでは失敗します。それがデバッグ設定が存在する理由です。スレッド化バグは一貫して存在しないためです。 –

関連する問題