NSPrivateQueueConcurrencyType
同時実行タイプで管理対象オブジェクト コンテキストを作成しています。
また、performBlock:
セレクターを使用してバックグラウンドで操作を実行しています。バックグラウンドで (performBlock:) オブジェクトをフェッチしている場合、結果として得られるマネージド オブジェクトをメイン スレッドで使用しても安全ですか?
NSPrivateQueueConcurrencyType
同時実行タイプで管理対象オブジェクト コンテキストを作成しています。
また、performBlock:
セレクターを使用してバックグラウンドで操作を実行しています。バックグラウンドで (performBlock:) オブジェクトをフェッチしている場合、結果として得られるマネージド オブジェクトをメイン スレッドで使用しても安全ですか?
ここで説明されているように、スレッドごとに異なるコンテキストを使用する必要がありますiOS開発者-コアデータマルチスレッド
実装する1つの方法は、CoreDataで説明されています-スレッド実装ごとに1つのコンテキスト
申し訳ありませんが、もっとよく検索する必要があります。これがまさに私の質問と回答です: コアデータの NSPrivateQueueConcurrencyType とスレッド間のオブジェクトの共有
原則として、NSManagedObject
使用している同時実行の種類に関係なく、スレッド間でインスタンスを共有することは安全ではありません。
ただし、コンテキストとオブジェクト インスタンスをスレッドセーフにするために使用できるライブラリがあります。これにより、コンテキスト間のスレッドの分離を確保することに関するすべてのナンセンスをほとんど無視して、アプリの実際の機能を構築するなど、重要なことに労力を集中させることができます。
100% 確信があるわけではありませんが、私自身の経験では、次のように行っています。変数のプロパティを変更する場合は、内部で行いますperformBlock
。読み取りが奇妙な動作を引き起こしているケースが 1 つありますが、一般的には問題ないようです。安全性を高めたい場合はperformBlock
、何らかの方法で管理対象オブジェクトに触れるたびに使用してください。