3

我正在慢慢迁移到 iOS 5 Core Data 新 API,我正在调查NSConfinementConcurrencyType.

来自 Apple 文档

限制(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

1 回答 1

4

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

父上下文的想法与线程限制的想法是正交的。父上下文是快速关联 MOC 所需的大多数参数的一种方法。(Apple 不清楚 MOC 之间实际传递的内容。他们也没有讨论合并政策问题。)我相信,你仍然必须抓住 MOC 间的通知。

如果我可以建议,不要过度思考这些事情。Lion/iOSv5 对 Core Data 的更改相当温和。

于 2012-06-06T13:26:15.503 回答