CoreData 并通知后台工作人员有关主线程的更改
Posted
技术标签:
【中文标题】CoreData 并通知后台工作人员有关主线程的更改【英文标题】:CoreData and notifying background workers about change in main thread 【发布时间】:2012-12-27 08:20:24 【问题描述】:我以为我的情况很简单,但是经过一整天的搜索,我不确定我是否有答案!!!
我正在使用 CoreData(实际上是使用 RestKit 和 [RKObjectManager sharedManager].objectStore
)。我保存数据以仅存储在主线程上。虽然我有很多从数据库读取数据的后台线程。如果主线程(使用 main NSManagedObjectContext
)将数据保存到数据库,我找不到任何通知这些后台线程的好方法。
我看到的唯一方法是保留所有后台线程的列表NSManagedObjectContexts
,并在主线程上处理NSManagedObjectContextDidSaveNotification
时发送每个mergeChangesFromContextDidSaveNotification
。
这是处理这种情况的正常方式吗?我有一种感觉,这不是因为在多线程环境中管理这种缓存可能出现的潜在问题。
【问题讨论】:
为什么需要通知这些线程?你有多少线程?您使用什么类型的线程?是的,NSManagedObjectContextDidSaveNotification
是通知他们的正确方式。
【参考方案1】:
没有详细信息很难理解发生了什么,但是可以,在后台线程中使用NSManagedObjectContextDidSaveNotification
。
但是要小心,如果你创建了很多线程来监听变化,电池电量可能会很快下降。
根据我的经验,Core Data 中的线程应按如下方式使用:创建一个或多个线程,在共享持久存储协调器中执行某些请求。当线程完成时停止(删除)它们。这种机制允许您将数据加载到存储协调器的缓存中,从而加快主线程中执行的未来请求。
希望对您有所帮助。
附:我不知道 RestKit 如何与 Core Data 一起工作。
【讨论】:
以上是关于CoreData 并通知后台工作人员有关主线程的更改的主要内容,如果未能解决你的问题,请参考以下文章