迁移到iOS 5核心数据新API:了解NSConfinementConcurrencyType

迁移到iOS 5核心数据新API:了解NSConfinementConcurrencyType,ios,core-data,Ios,Core Data,我正在慢慢地迁移到iOS 5核心数据新API,我正在研究NSConfinementConcurrencyType 来自Apple文档 限制(nsconfinementconcurrency类型)。这是默认设置。你 保证上下文不会被其他线程使用 你在上面创建的。(这是完全相同的线程 您在早期版本中使用过的要求。) 我并不十分清楚的是,在这种情况下,违约的含义。这到底意味着什么 通常,如果我需要在CD中执行很长的导入操作,我会设置一个新的NSOperation类,然后创建自己的上下文 - (void

我正在慢慢地迁移到iOS 5核心数据新API,我正在研究
NSConfinementConcurrencyType

来自Apple文档

限制(nsconfinementconcurrency类型)。这是默认设置。你 保证上下文不会被其他线程使用 你在上面创建的。(这是完全相同的线程 您在早期版本中使用过的要求。)

我并不十分清楚的是,在这种情况下,违约的含义。这到底意味着什么

通常,如果我需要在CD中执行很长的导入操作,我会设置一个新的
NSOperation
类,然后创建自己的上下文

- (void)main
{
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];

    // other code here...
}
现在,我可以利用父上下文并执行以下操作:

- (void)main
{
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
    [moc setParentContext:[self masterMoc]];

    // other code here...
}
如果这样说,那么
NSConfinementConcurrencyType
呢?什么是典型的使用示例?

默认情况下,苹果的意思是这是核心数据MOC一直以来的标准工作方式。MOC必须在使用它的线程上创建。在上面的代码中,您遵循的是标准的、历史上有效的MOC使用模式。其他类型的MOC创建和管理自己的后台队列或绑定到主队列。这可以在某种程度上简化事情。或者不是。它们主要是MOC的面向块的接口。有时候,拥有它很好。(虽然块是新的热点,但它们并非纯粹的好东西。我见过懒惰的程序员编写的面向块的代码。它们在方法中留下了太多的复杂性。通过微妙的交互,维护这些代码可能非常困难。)

父上下文的思想与线程限制的思想是正交的。父上下文是快速关联MOC所需大多数参数的一种方法。(苹果公司不清楚主运行中心之间到底发生了什么。他们也没有讨论合并政策问题。)我相信,你仍然需要关注主运行中心之间的通知


如果我可以建议的话,不要过度考虑这些事情。Lion/iOSv5对核心数据的更改相当温和。

+1感谢您的支持。那么,你是说创建一个上下文就像我在第二段中做的一样,创建一个约束上下文也是一样的吗?谢谢。父上下文的概念与线程限制的概念是正交的。你是说我需要继续监听主线程中的通知吗?据我所知,当我在后台上下文中保存时,保存不会写入磁盘,而是写入内存。此保存是否合并了两个上下文?Flex_Addicted,
NSConfinementConcurrencyType
是默认的上下文类型。因此,
NSManagedObjectContext.new
将创建该类型的一个。您需要使用更具体的初始值设定项,
-initWithConcurrencyType:
,以获取任何其他类型的MOC。AndrewFlex_Addicted,W.r.t.
-保存:
,它始终保持其数据<代码>-保存:是我所知道的在主运行中心之间进行通信的唯一方式。因此,您仍然需要侦听通知。子MOC不会在父MOC中创建其对象。例如,您可以创建操纵对象的子MOC,然后丢弃更改。母MOC不受影响。(有在MOC之间重定对象的概念。当我想返回在后台选择的对象,但不向父MOC返回值时,我使用此方法。[通过objectID到对象转换来执行此操作。])Andrew