使用 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 对象执行保存操作是不是安全的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中前向声明枚举

如何在 Objective-C 中使用 Swift 字符串枚举?

在 Swift 中使用 Objective-C 枚举

对数组求和 - Objective-C

Objective-C枚举的几种定义方式与使用

枚举宏(Adopting Modern Objective-C)