2016-04-07 8 views
-1

ConcurrencyType NSPrivateQueueConcurrencyTypeを持つNSManagedObjectContextを作成しました。コンテキストを持つすべてのタスクに対してブロックAPIのみを使用する必要があることを読んでいます。実行ブロックのないNSPrivateQueueConcurrencyType

私の質問は、ブロックAPIを実行し、コンテキストでタスクを直接実行しないとどうなりますか?

答えて

2

ショート:しないでください。

長く:これはPrivateConcurrencyTypeバージョンNSManagedObjectContextの内部実装によって異なります。私はあなたが1つのスレッドからのみそれを使用し、そのコンテキストから他のスレッドにオブジェクトを渡さない場合、かもしれないと推測します。か否か。しかし、

  1. 保証はありません。
  2. 1つのスレッドでのみ使用する場合は、 制限の同時実行型が必要です。実際には、あとでいくつかの並行処理が必要な場合には、私はおそらく閉じ込めを使用しないでしょうが、ここでは理論的になっていますよね?
  3. 今でも動作しても、将来的には壊れる可能性があります。

異なるスレッドからこのコンテキストを使用する場合は、が確実に破損します()。いくつかのデータが無作為に消えたり再現したり(一度起こったこと)、何かがクラッシュしたり、ユニコーンがあなたのオフィスを襲うことがあります。だからちょうどしないでください

+1

制限は廃止されました。残りについては、OPはこの助言に従うべきです。 performBlockなしでプライベートコンテキストを使用しないでください。最終的にデータが破損します。 –

+0

@ MarcusS.Zarra、ありがとう、私はそれが推奨されていないことを知っていたが、廃止されたことを忘れてしまった。私はそれを使用しないでくださいとにかく:) – FreeNickname

関連する問題