我知道这不是一个新话题,但我还没有找到关于我的问题的明确答案。
我正在开发一个项目,该项目有一个包含“书”的核心数据模型。因此,当我通过网络下载 json 数据时,我想将这些 Book 模型存储在我的核心数据中(当然是在后台线程中以不阻塞 UI),然后将这些 Book 模型传递给我的控制器并加载表。
然而,当我学习了 Apple 的 Core Data Reference 之后,我就迷惑了。该文件说我不应该在上下文之间传递托管对象。但是我有两个上下文,一个用于主线程,一个用于后台线程,用于下载、存储数据和获取当前更新的数据。所以我应该做的是在后台获取托管对象ID,并将这些ID传递给主线程中的上下文,然后在主线程中获取具有这些ID的托管对象。
问题来了。在主线程中获取具有 id 的托管对象会阻塞 UI 吗?当我在主线程中获取带有 id 的托管对象时,我是否正在访问 SQLite?如果这些获取的托管对象中有一些是错误的,这意味着如果我想获取它们的属性,我可能会执行 IO,我认为它仍然会阻塞我的 UI。
那么,在不阻塞 UI 的情况下,使用 Core Data 在后台获取数据并在主线程中显示这些数据(UI 操作应该在主线程中)的实用模式是什么?
感谢您的任何帮助!
重新思考:
实际上所有的答案都没有解决我的问题。 但是,我又回到了一个考虑,即当我们需要在核心数据中使用多线程编程时。在大多数情况下,直接使用核心数据可能就足够高效了。我高估了主线程中核心数据操作的成本。
但是,我仍然希望有人推荐一种实用的模式来在后台进行获取,并在主线程中显示。我会很感激的!