iOS 核心数据并发和其他后台队列
iOS Core Data concurrency and other background queues
我正在开发一个涉及 Core data
并发的 iOS SDK。
用户案例是:
- 应用在主队列上调用
SDK's
api 回调
Core data
工人 MOC 是 NSPrivateQueueConcurrencyType
。它需要在其队列中创建模型并保存到持久性。
- 然后,SDK需要在后台做一些冗长的操作,然后在主队列上运行回调;或
- MOC 仍需要更新其队列中的模型并运行回调
在主队列中。
这是我的设计。从理论上讲,它应该有效。但是,它看起来有点复杂。还有其他解决办法吗?
在实践中它可能看起来有点复杂,但它可能是最简单、结构最完善的方法。
从技术上讲,你只能使用 2 个队列(真正的线程)和 NSConfinementConcurrencyType
- 假设你只有 1 个后台线程,你的图表不是 100% 清楚 - 但它实际上使你的核心数据工作有点棘手,也不太明显。如果您总是使用私有队列上下文,那么您就会知道在该上下文上操作的所有内容都需要在块中,并且很容易看出任何错误所在。
如果您要让多个后台线程全部更新上下文,那么您的图表是最简单的选择。
我正在开发一个涉及 Core data
并发的 iOS SDK。
用户案例是:
- 应用在主队列上调用
SDK's
api 回调 Core data
工人 MOC 是NSPrivateQueueConcurrencyType
。它需要在其队列中创建模型并保存到持久性。- 然后,SDK需要在后台做一些冗长的操作,然后在主队列上运行回调;或
- MOC 仍需要更新其队列中的模型并运行回调 在主队列中。
这是我的设计。从理论上讲,它应该有效。但是,它看起来有点复杂。还有其他解决办法吗?
在实践中它可能看起来有点复杂,但它可能是最简单、结构最完善的方法。
从技术上讲,你只能使用 2 个队列(真正的线程)和 NSConfinementConcurrencyType
- 假设你只有 1 个后台线程,你的图表不是 100% 清楚 - 但它实际上使你的核心数据工作有点棘手,也不太明显。如果您总是使用私有队列上下文,那么您就会知道在该上下文上操作的所有内容都需要在块中,并且很容易看出任何错误所在。
如果您要让多个后台线程全部更新上下文,那么您的图表是最简单的选择。