【发布时间】:2010-08-27 04:11:05
【问题描述】:
我正在开发一个 iPhone 应用程序,它通过网络传输数据并将接收到的数据保存在核心数据对象中以供以后使用。目前。它在单个线程中正常工作,但我正在努力将数据传输机制转换为在单独的工作线程中运行。
我已经阅读了关于多线程的核心数据编程指南,并且我计划为每个线程使用单独的托管对象上下文和一个单一的持久存储协调器,这似乎是 Apple 推荐的。
应用程序的主线程永远不需要创建或删除核心数据对象,而是询问工作线程。它主要是读取对象并偶尔修改它们。它还会定期要求工作线程从网络中获取新对象或现有对象的更新。
我的问题涉及我需要做些什么来支持这一点。核心数据编程的多线程部分说我可以通过传递对象 ID 在两个线程之间“传递”对象。我对我需要做什么感到有点困惑。这两个线程是否每个都有自己获取的每个对象的副本?如果是这样,它们是如何同步的?您是否应该明确地对您知道其他线程已修改的对象进行故障处理以使它们重新加载?
假设我在主线程中使用了一个对象,并且工作线程修改了它。让工作线程通知主线程该对象已被修改以便主线程可以错误地强制重新加载就足够了吗?还是会自动出错?或者也许这整个场景是一个坏主意,会导致异常?
我正在考虑通过在当前正在使用的所有对象的主线程中添加一个字典来实现这一点。当工作线程修改一个时,大概是因为它从网络获取了更新版本,我将让它向主线程发出信号,如果它当前在它正在使用的对象列表中,则主线程可以使对象出错。这听起来是个好主意,还是有必要?
【问题讨论】:
标签: iphone multithreading core-data