【发布时间】:2023-03-28 14:14:01
【问题描述】:
我有一个带有类方法的 CoreDataUtilities 类,该类方法可以保存托管对象上下文并处理任何错误:
+ (void)saveContext:(NSManagedObjectContext*)moc {
NSError *error = nil;
if (moc != nil) {
if ([moc hasChanges] && ![moc save:&error]) {
NSLog(@"MOC save error: %@, %@", error, [error userInfo]);
}
}
}
我从 NSOperation 子类和后台线程调用这个方法,并传入线程/NSOperation 的 NSManagedObjectContext 实例。
我担心的是:
如果线程 A 调用了这个方法,当这个方法执行到一半时,线程 B 也会调用它。当然还有另一个 MOC。这会以任何方式干扰吗?从我的角度来看,它不会,因为这个方法只与调用线程“私有”或“拥有”的 MOC 实例通信。但是让我恼火的是,当多个线程同时执行同一段代码时,即使方法中的局部变量也会“混淆”。还是每个变量在新线程中都有自己的“上下文”,有自己的内存堆(或堆栈,就此而言)?
如果我把这个保存代码直接放到 NSOperation 子类和后台线程中会有很大的不同吗?为什么?
【问题讨论】:
标签: iphone ios core-data concurrency nsmanagedobjectcontext