iphone - 我应该依赖NSManagedObjectId在上下文之间交换NSManagedObject吗?

时间:2012-09-11 09:43:28

标签: iphone performance core-data nsoperation nsoperationqueue

这是design question,以下是我的问题的背景。


问题

我正在撰写新闻应用。

我从Feed中下载了许多新闻项目(项目包含标题,内容,图像等)。然后我会将所有项目存储到CoreData db

同时,我可以从数据库中获取项目并在UI上显示它们。

我理解CoreData数据库操作(特别是如果很重)可能会影响和滞后UI,因此我想将所有CoreData操作放入具有最低线程优先级的NSOpeartionQueue。例如,典型的操作可能是获取订阅源的所有项目并使其为UI准备就绪。

由于CoreData不是线程安全的,并且操作和主线程内的上下文不同,这里有一个问题:如何将这些项提供给主线程,以便主线程可以相应地更新UI?


提案

我有两种可能的解决方案。

第一个解决方案是每个NSManagedObject项目的,我创建一个与任何上下文无关的新项目,然后将所有新闻项目返回给主线程。然后主线程使用这些新项目作为使用非NSManagedObject。该解决方案具有缺点:存储器成本。我必须为所有提取的项目加倍内存。

第二个解决方案是在获取时,在NSOperation中,我不会获取除这些项的objectId之外的任何内容。然后将所有objectId提供给主线程,主线程可以从其自己的上下文中读取所有真正的NSManagedObject项。该解决方案也有一个缺点:UI的可能滞后。由于读取db会在主线程中再次出现,我担心读取会影响UI。


任何人都可以给我一些建议吗?

由于

0 个答案:

没有答案