【发布时间】:2014-01-16 10:49:59
【问题描述】:
我正在开发一个使用 Core Data 进行内部存储的应用程序。此应用程序具有以下功能:
- 通过下载并解析大型 XML 文件,然后将条目与核心数据一起保存,从而与服务器同步数据。
- 允许用户进行提取(大数据提取)和 CRUD 操作。
我已经阅读了很多文档,其中有几种模式可以遵循,以便将多线程与 Core Data 一起应用:
- 嵌套上下文:这种模式似乎存在许多性能问题(子上下文在进行提取时会阻塞祖先)。
- 使用一个主线程上下文和后台工作者上下文。
- 使用单个上下文(主线程上下文)并通过 GCD 应用多线程。
我尝试了上面提到的 3 种方法,发现最后 2 种可以正常工作。但是,在谈论性能时,我不确定这些方法是否正确。
是否有一个众所周知的性能模式可以应用,以制作一个实现上述功能的健壮应用程序?
【问题讨论】:
-
你看过神奇的唱片吗?
-
是的,我有,但我必须直接使用 Core Data,而不使用任何外部库。
-
您是否评估了一个两阶段堆栈,其中 "root context" 使用私有队列,而 "main context" 与之关联到使用“根上下文”作为其父级的主线程(主队列)。任何其他附加上下文(如果需要)可以使用私有队列并使用“主上下文”或“根上下文”作为其父级。
-
@CouchDeveloper 我通过创建一个“根上下文”(NSPrivateQueueConcurrencyType)、一个“主上下文”(NSPMainQueueConcurrencyType)尝试了两个堆栈阶段,其中“根上下文”作为父上下文和“附加上下文”(NSPrivateQueueConcurrencyType ) 将“主要上下文”作为父级。这种方法显示了很多问题(即:在“附加上下文”中执行大量提取时,“主上下文”被阻止,因此 UI)。
-
@CouchDeveloper 检查此链接wbyoung.tumblr.com/post/27851725562/core-data-growing-pains。它说你提到的方法有很多后备。
标签: ios iphone multithreading core-data