我有一个NSManagedObjectContext的竞争条件。我正在尝试使用 NSManagedObjectContext 上的锁定来防止这种情况发生的各种方法。正如苹果建议的那样,使用 dispatch_sync 似乎是一种更好的方法。但是我无法弄清楚是否可以保存一个对象(在使用 dispatch_sync 执行的块下使用)以免被两个不同的线程访问。
这是我要问的更清晰的图片:
[[*Some Singleton class* instance].managedObjectContext executeFetchRequest:request error:&err];
// After fetching results do something in DB
假设上面的代码是在一个使用 dispatch_sync 执行的块中传递的,如下所示:
dispatch_sync(someConcurrentQueue, ^{
[[*Some Singleton class* instance].managedObjectContext executeFetchRequest:request error:&err];
// After fetching results do something in DB
});
在此块完全执行之前,任何其他线程是否可以访问 [ Some Singleton class instance].managedObjectContext。
AFAIK 可以访问它。如果这是真的,那么在 NSManagedObjectContext 上应用锁定是防止这种竞争条件的唯一方法吗?