2012-06-05 51 views
3

我慢慢迁移到iOS 5中核心数据的新API,我调查大约NSConfinementConcurrencyType移植到iOS 5中核心数据的新API:了解NSConfinementConcurrencyType

从苹果文档

坐月子(NSConfinementConcurrencyType)。这是默认设置。您保证上下文不会被您创建它的 以外的任何线程使用。 (这是完全一样的线程 要求你已经在以前的版本中使用。)

的事情是不是真的明显,我是默认在这方面的意思。它的真正含义是什么?

通常情况下,如果我需要执行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什么?什么可能是一个典型的使用示例?

预先感谢您。

回答

4

Flex_Addicted,

通过“默认情况下,”苹果公司表示,这是标准的方式核心数据MOCS一直工作。 MOC必须在使用它的线程上创建。在上面的代码中,您遵循标准的历史有效的MOC使用模式。其他样式的MOC创建并管理自己的后台队列或绑定到主队列。这可以简化一些事情。或不。首先,它们是面向MOC的面向块的接口。有时候这很好。 (尽管块是新的热点,但它们并不是一个非合作的好东西,我看到了懒惰的程序员编写的面向块的代码,它们在方法中留下了太多的复杂性,通过微妙的交互来维护这些代码可能非常困难。 )

一个父上下文的想法是正交于该线程禁闭。父上下文是快速关联MOC所需的大部分参数的一种方法。 (苹果公司并不清楚MOC之间实际发生了什么,也没有讨论合并政策问题。)我相信,你们仍然需要赶上MOC间的通知。

如果我可以建议,不要过度考虑这些事情。 Lion/iOSv5的核心数据变化非常小。

Andrew

+0

+ 1为您的支持。那么,是否像我在第二个片段中创建背景一样创建了一个限制环境?谢谢。 –

+0

With *父上下文的思想与线程限制的思想是正交的。*你是否说我需要继续在主线程中监听通知?据我了解,当我保存在后台上下文中时,保存不会写入磁盘,而是写入内存。这是否保存合并两个上下文? –

+0

Flex_Addicted,'NSConfinementConcurrencyType'是默认的上下文类型。因此,一个'NSManagedObjectContext.new'创建一个这样的类型。您需要使用更具体的初始化程序“-initWithConcurrencyType:”来获取任何其他类型的MOC。Andrew – adonoho