我想在後臺線程和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