Core data 主线程中的多个上下文:为什么以及何时使用它们?

Core data 主线程中的多个上下文:为什么以及何时使用它们?,core-data,memory-management,nsmanagedobjectcontext,Core Data,Memory Management,Nsmanagedobjectcontext,我正在寻找一个简单的答案,它可以强调在同一个线程中使用(或避免)多个上下文的规则(在我的例子中是主要的) 通常,在核心数据中,我设置了一个在整个应用程序中使用的主上下文。然后,如果我需要执行一些后台工作,我会为我运行的每个后台操作创建一个上下文 这种方法在大多数情况下都是有效的。核心数据以完美的方式管理内存。但我也可以决定显式清除一些对象图(管理内存占用)。在这里,我可以依靠-(void)refreshObject:(NSManagedObject*)object mergeChanges:(B

我正在寻找一个简单的答案,它可以强调在同一个线程中使用(或避免)多个上下文的规则(在我的例子中是主要的)

通常,在核心数据中,我设置了一个在整个应用程序中使用的主上下文。然后,如果我需要执行一些后台工作,我会为我运行的每个后台操作创建一个上下文

这种方法在大多数情况下都是有效的。核心数据以完美的方式管理内存。但我也可以决定显式清除一些对象图(管理内存占用)。在这里,我可以依靠
-(void)refreshObject:(NSManagedObject*)object mergeChanges:(BOOL)flag将其传递给
NO
param。但是,我需要小心那些可能丢失的待定更改

现在,我的问题如下。是否有任何经验法则可以决定我可以在单个线程(主线程)中使用的上下文数量?我的想法如下。创建主上下文(保存更改的位置)和仅用于显示目的并根据需要创建的其他上下文。当我使用完一个后,我可以发送一个
reset
来回收整个内存

有什么建议吗?如果对新的iOS 5 API有任何影响,请分享。

flexaddicted

主线程上下文对于草稿行工作和管理工作集最有用

Scratchpad工作是使用MOC处理您不打算保存的数据。
-保存:
。或者为撤消管理器设置内容。我觉得这没有你想象的那么有价值

如果您的UI将显示一组在其余UI中未使用的对象,那么您可以使用新的MOC管理内存,然后在关闭视图时将其处理掉。这允许所有那些对应用程序其余部分没有实用价值的项目都被处理掉。虽然这对管理内存很有用,但它不能代替响应iOS中的内存警告来修剪树


安德鲁

谢谢安德鲁。你回答的第二部分我很清楚。第一个呢?草稿行工作是什么意思?草稿行工作是使用MOC处理您不打算保存的数据:?谢谢+1确实,Flex上瘾了,scratchpad就是它听起来的样子——一个可以涂鸦数据但不能保存数据的地方。在我的应用程序Retweever中,我使用scratchpad MOC计算树形图的权重。这种重新称重只是为了可视化,而不是为了持久存储。因此,我从不从MOC保存东西。安德烈·汉克斯。我很难理解英语我没听懂。在同一线程中有2个或更多上下文可以吗?我在主线程上运行了两个上下文,这会导致死锁吗?这取决于。我经常在主线程上运行多个上下文。(第二个上下文通常是只读上下文。有时每个视图控制器都有一个主线程上下文。)真正的问题是为什么要运行两个主线程上下文?无论如何,必须根据对象ID在所有上下文之间传输对象。上下文是主要内容,而不是线程。如果按ID进行传输,则不会出现死锁。