我正在开发一个将核心数据用于内部存储的应用程序。该应用程序具有以下功能:
为了使用Core数据应用多线程,我已经阅读了大量的文档,需要遵循几种模式:
我尝试了上述三种方法,并意识到最后两种方法可以正常工作。然而,在谈到性能时,我不确定这些方法是否正确。
为了使实现上述功能的健壮应用程序,是否需要应用一个众所周知的表演性模式?
发布于 2014-01-17 13:39:22
罗克里迪
在我的推特iOS应用程序,Retweever和#chat中,我使用了一个简单的两种MOC模型。所有数据库插入和删除都是在私有并发insertionMOC上进行的。主MOC通过来自-save:的insertionMOC通知进行合并,并在合并处理期间发出自定义UI更新通知。这让我可以以一种有步骤的方式工作。所有进入应用程序的推文都在后台进行处理,并在完成所有操作后呈现给用户界面。
如果你下载这些应用程序,#chat的引擎已经现代化,比Retweever的引擎更高效,更远离主线程。
安农,安德鲁
发布于 2014-01-16 11:37:37
Apple建议对每个线程使用单独的上下文。
使用Core数据进行并发编程所推荐的模式是线程限制:每个线程必须有自己的完全私有的托管对象上下文。采用这种模式有两种可能的方法:为每个线程创建一个单独的托管对象上下文,并共享一个持久存储协调器。这是典型的推荐方法。为每个线程创建单独的托管对象上下文和持久存储协调器。这种方法提供了更大的并发性,而牺牲了更大的复杂性(特别是当您需要在不同上下文之间交流更改时)和增加内存使用量。
见苹果文档
发布于 2014-01-16 11:41:00
根据apple文档,使用线程限制来支持并发,每个线程创建一个托管对象上下文。这会让你的生活更轻松。这是用于在后台解析大型数据以及在主线程上获取要在UI中显示的数据。
关于合并问题,有一些最好的方法。永远不要在线程之间传递对象,但如果需要,则将对象In传递给其他线程,并从该线程访问它们,例如,当您通过解析xml保存数据时,您应该将它们保存在当前线程moc上并获取它们的In,然后在UI线程重新获取它们时传递给UI线程。
您还可以注册通知,当一个moc更改时,用户信息字典会通知您,它将有更新的对象,您可以将它们传递给合并上下文方法调用。
https://stackoverflow.com/questions/21159641
复制相似问题