0

我对自 iOS 5 以来 CoreData 新支持的并发功能感到兴奋。

维护一个私有队列,所有保存或获取请求都可以通过该队列完成。

但是,我可以设置the private queueCoreData 以便它一一执行请求吗?

我的应用程序正在从多个提要中下载新闻项目。每次从一个提要下载和解析完成后,我只是通过私有队列将提要的项目保存到 CoreData 中。

但是,由于我同时从多个提要下载和解析,我总是有多个项目组,即multiple save requestsCoreData。

现在的情况是,我猜 CoreData 只有多个线程,每个线程都将一组项目保存到数据库中。与此同时,我的 UI 卡住了。

你认为我可以控制私人队列,这样无论有多少同时保存的请求,它们都会一个一个完成?

4

1 回答 1

3

核心数据(可能)只使用一个串行队列或线程,因为它是串行的。我最近将我的应用程序从使用我创建的串行队列(应用程序是 4.3)转换为在 iOS 5 中使用这个新选项。在所有情况下,当您“执行阻止”时,该方法都以串行方式处理。此外,您现在可以从任何队列中调用“[moc performBlocK:...]”,因为该调用是线程安全的!

我相信您想要做的是让您的后台线程(最有可能添加选项)使用“performBlock:”(无需等待)。然后,您提供的块会以 FIFO 方式排队和处理。稍后,如果您的表想要获取对象,它可以发出“performBlockAndWait:”,或者您的代码可以选择使用 performBlock 请求最新的对象,并在提供的块消息结束时将对象集返回给您的应用程序你需要。

此外,我只经常在开发版本中保存,以验证有效性。一旦您确定一切正常,您就可以在下载所有数据后执行后台保存。

EIDT:重申一下 - 如果您在加载 viewController 时正在下载并使用图像或其他数据,并且发生了很多事情,那么这是进行保存的最糟糕的时间。使用计时器或dispatch_after,在一切看起来稳定后几秒钟,然后进行保存。

于 2012-09-13T21:31:26.817 回答