メソッドが非同期で実行されているかどうかを確認するにはどうすればよいですか?
非同期ディスパッチ キュー (GCD) を介して非同期的に呼び出されることもあれば、同期的に呼び出されることもあるコア データ関連のメソッドがいくつかあります。
// sometimes this happens
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[[DataServices sharedInstance] doSomeCoreDataStuff:^(BOOL result, NSString *message)
{
// do some post-stuff here
}];
});
// other times this happens
[[DataServices sharedInstance] doSomeCoreDataStuff:^(BOOL result, NSString *message)
{
// do some post-stuff here
}];
これに加えてNSManagedObjectContext
、アプリ全体でシングルトンを使用しています。コンテキストはスレッド セーフではないため、コア データ メソッドが非同期で実行されている場合は、それらのメソッド内に新しいコンテキストを作成する必要があります。それ以外の場合は、シングルトン インスタンス コンテキストを使用します。
頭に浮かぶ唯一のアプローチは次のようなものです[[NSThread mainThread] isMainThread]
が、GCDはメインスレッドで機能する場合と機能しない場合があるため、これは機能しません。