更新了核心数据并发文档?

时间:2014-09-23 22:37:03

标签: ios objective-c core-data concurrency

我发现最佳做法的唯一(也是最新)结果如下:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html

然而,页面顶部说,

"重要:自编写本文档以来,使用Core Data实现并发的最佳实践发生了巨大变化;请注意,本章并不代表当前的建议。"

在哪里可以找到更多关于核心数据并发性的最新文档?

4 个答案:

答案 0 :(得分:7)

现在最好的讨论是在“并发”下进行的。在NSManagedObjectContext documentation内。

我的总结:

仍然需要线程限制。 iOS 5 / OS X v10.7引入的重大变化是,上下文现在可以将其他上下文作为父项,并可以管理自己的串行队列。

保存时,更改会自动从子级迁移到父级。现在,这意味着什么。只有当您的父级是持久性存储时,才实际提交到磁盘。

因此,所有关于通过通知进行同步的内容都是Apple不希望您遵循的内容。所有这些机制仍然可用,但Apple已将最常见的模式直接引入框架中。

答案 1 :(得分:3)

核心数据编程指南已针对iOS 9 / OS X El Capitan进行了更新。请参阅https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Conceptual/CoreData/Concurrency.html

我还发现WWDC 2014 session 225 What's new in Core Data(在22:50)非常有助于理解当前和历史并发方法。

答案 2 :(得分:2)

线程限制已经过时。您可以在NSManagedObjectContext的标题中看到这一点:

NSConfinementConcurrencyType        = 0x00,    /* this option is obsolete and not recommended for new code. */

使用-init创建上下文时,它会使用参数-initWithConcurrencyType:调用初始值设定项NSConfinementConcurrencyType。这是“并发核心数据编程指南”一节中描述的线程模型,该模型已经过时,一段时间内不推荐使用。用一位核心数据工程师的话来说“它只是不起作用。”。

不幸的是,核心数据编程指南尚未更新,以描述当前推荐的并发和其他进步的最佳实践。 但是,嘿,至少它没有告诉你使用锁定!

Incremental Store Programming Guide最近已更新。它描述了如何实现NSIncrementalStore,并且这样做可以很好地解释一些Core Data的内部。例如,它描述了故障是什么以及故障的发生方式远远好于核心数据编程指南。过去several years的核心数据发布说明包含了一些有关最佳实践的更新信息,并且有一些与核心数据相关的技术说明。

过去几年中最好的信息是WWDC每年一次的“核心数据新内容”会议。对于并发性,您应该查看这些WWDC会话:

WWDC 2011 What's new in Core Data on MacOS X。 MacOS X会话比iOS会话更详细。

WWDC 2012 Core Data Best Practices

我建议您使用“核心数据编程指南”页面上的“反馈”按钮,或者提出雷达错误,要求更新文档。

答案 3 :(得分:0)

我一直关注的指南就在这里:http://www.cocoanetics.com/2012/07/multi-context-coredata/即使它是在2012年写的,它似乎仍然与我目前使用的内容相匹配。它可以帮助您使用NSMainQueueConcurrencyType设置主要父上下文,使用NSPrivateQueueConcurrencyType设置多个背景上下文,还可以使用具有持久性存储的后台编写器上下文。

XCode 6和Yosemite似乎在核心数据调试方面也有所改进:http://oleb.net/blog/2014/06/core-data-concurrency-debugging/。这有助于理解如何在正确的位置使用performBlock。