使用 Objective-C 快速枚举时对 NSManagedContext 对象执行保存操作是不是安全
Posted
技术标签:
【中文标题】使用 Objective-C 快速枚举时对 NSManagedContext 对象执行保存操作是不是安全【英文标题】:Is it safe to perform save operations on an NSManagedContext object when using Objective-C fast enumeration使用 Objective-C 快速枚举时对 NSManagedContext 对象执行保存操作是否安全 【发布时间】:2013-10-19 21:56:44 【问题描述】:我想知道这种代码是否可以使用
NSManagedObjectContext *moc = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
for (NSDictionary *dict in objects)
Object *object = [NSEntityDescription insertNewObjectForEntityForName:@"object"
inManagedObjectContext:moc];
// Populate model fields with appropriate dictionary keys
我问的原因是建议您不要跨线程传递对托管对象上下文对象的引用,并想知道这是否确实是这里发生的事情。
【问题讨论】:
【参考方案1】:使用for (object in collection)
的快速枚举与线程无关。所有这些代码都在同一个线程上运行。
【讨论】:
【参考方案2】:如果该插入操作是线程化的,您应该考虑创建一个后台的 NSManagedObjectContext 来处理它,这是一个太大的帖子,之前在 SO 上回答过。
performBlock:
【讨论】:
【参考方案3】:您正在使用一个 ManagedObjectContext,您的代码中没有线程问题。你做对了。所有的代码都是顺序的。 如果要使用多个上下文,每个上下文都在一个线程中,则应注意多线程。
【讨论】:
以上是关于使用 Objective-C 快速枚举时对 NSManagedContext 对象执行保存操作是不是安全的主要内容,如果未能解决你的问题,请参考以下文章