我想在后台线程和NSOperationQueue中使用核心数据。现在我想我为什么不应该创建一个拥有NSManagedObjectContext属性的所有Core Data堆栈的东西,然后让这个属性成为原子?在这种情况下,@synchronize是否可以防止竞态条件?
有一两件事我不知道@synchronize(self) {...}
是这样的:假设我有一个被认为是线程安全的属性:
@property (retain) NSManagedObjectContext *moc;
每天的NSOperation或线程访问的CoreDataTools
类有这个MOC属性。他们访问这样的moc属性:
// Assume: Inside an NSOperation or new thread here...
NSManagedObjectContext *moc = [[CoreDataTools sharedInstance] moc];
// Do a lot of things with moc. Add and remove 20 objects.
这会有效吗?我不明白这个锁是否有效。只是在实际访问该属性的情况下?或者我可以安全地使用NSManagedObjectContext实例,直到后台线程的NSOperation或调用方法完成并返回?
我知道NSMangagedObjectContext有一个-lock方法。一般情况下我想知道这是否可行。
@synchronized(个体经营){/ *锁是有效率的内线这里只* /} – Rayfleck 2011-06-01 13:56:19
这是问题的答案。让它成为一个,我会接受它! :=) – 2011-06-01 14:29:50