使用 Core Data 时,线程安全问题一直存在。NSManagedObjectContext
在两个不同线程中的一个上执行获取保证了死锁。Apple 的核心数据编程指南建议使用线程限制,但没有提供可以实现此目的的模式。我在下面有一个快速而肮脏的解决方案:
- (NSManagedObjectContext *) managedObjectContext
{
NSManagedObjectContext *moc = objc_getAssociatedObject([NSThread currentThread], _cmd);
if (!moc && self.persistentStoreCoordinator)
{
moc = [[NSManagedObjectContext alloc] init];
moc.mergePolicy = NSOverwriteMergePolicy;
moc.persistentStoreCoordinator = self.persistentStoreCoordinator;
objc_setAssociatedObject([NSThread currentThread], _cmd, moc, OBJC_ASSOCIATION_RETAIN);
}
return moc;
}
此方法将出现在管理我的应用程序中的数据堆栈的专有类中。它将 MOC 与当前线程相关联。这对我来说似乎是一个合理的解决方案,但它也显得又快又松。
尝试这样的解决方案我应该担心什么?