多くの人が同様のタイトルで質問をしていますが、目的は大きく異なります。
CoreDataでは、他のクラスからのメソッド呼び出しを許可する場合 (既定ではすべてのクラスで許可されます)、現在のキュー、現在のスレッド、および現在の NSOperationQueue (NSOperation の場合) を追跡する必要があります。これについて「おそらく」というものはありません。これは難しい要件です。
それは問題ありません。一般に、次のことを確認するのは簡単です。
NSAssert( [NSThread currentThread].isMainThread || myPrivateQueue == dispatch_get_current_queue(), @"You tried to call this method from an external thread, or a queue other than my internal private queue. That's not legal, and will cause data corruption" );
...Appleがdispatch_get_current_queue()を廃止し、非推奨にしたことを除いて、明らかに「人々がGCDの欠落している機能/理解していないGCDのビットを回避するためにそれを悪用していたため」.
注: 上記の dispatch_get_current_queue() の私の使用法は、Apple のヘッダー コメントから判断すると、正しく、乱用されていないように見えます: 全体的なポイントは、キューが私が作成したプライベートなものであることを確認していることです (Apple は、これは許容される使用法であると主張しています)。 .
単に実装の欠陥のために何かを非推奨にするという知恵はさておき:( ... Appleによって削除されたこれに対する回避策を誰かが見つけましたか?具体的には:CoreDataを使用すると、キューを追跡する必要があります-それを行う別の方法はありますか? ?
(これは重要です: CoreData を使用すると、何かがそのようなメソッドを誤って呼び出すことを許可した場合、「クラッシュ」が発生せず、「データの破損」が発生し、手遅れになったときに将来のある時点で表示されます。それを修正する」)