我知道这不是一个新话题,但我还没有找到明确的答案在我的问题。核心数据和多线程编程
我正在研究一个项目,该项目有一个包含“书”的核心数据模型。因此,当我通过网络下载json数据时,我想将这些Book模型存储在我的核心数据中(当然在后台线程中不会阻止UI),然后将这些Book模型传递到我的控制器和加载表。
但是,当我了解Apple的核心数据参考时,我感到困惑。该文件说,我不应该在上下文之间传递托管对象。但是我有两个上下文,一个用于主线程,另一个用于后台线程,用于下载,存储数据和获取当前更新的数据。所以我应该做的是在后台获取托管对象ID,并将这些ID传递给主线程中的上下文,然后在主线程中使用这些ID获取托管对象。
问题来了。在主线程块UI中使用id获取托管对象?当我在主线程中使用它们的id来获取托管对象时,我是否正在访问SQLite?如果这些提取的托管对象中有些是错误的,这意味着如果我想获得它们的属性,我可能会执行IO操作,但我认为它仍然会阻止我的UI。
那么,什么是使用核心数据获取的后台数据,也不会妨碍用户界面显示在主线程(UI操作应该在主线程),这些数据的实际模式?
谢谢你的帮助!
反思:
其实所有的答案都没有解决我的问题。 但是,当我们需要在核心数据中使用多线程编程时,我回到了一个考虑。对大多数情况来说,直接使用核心数据可能足够高效。我在主线程中高估了核心数据操作的成本。
但是,我仍然希望有人推荐一种实用的模式在后台执行获取操作,并在主线程中显示。我将不胜感激!
我认为这很有帮助。就我而言,当用户拉动加载更多时,我将下载50本书并插入核心数据,并在我的用户界面中显示所有书籍。我认为核心数据50项只是少量的数据。但是,我正在考虑在用户第一次启动应用程序时是否下载所有图书,只是在主线程中执行所有这些操作可能会非常繁重。 – 2013-04-23 09:02:37