这是design question
,以下是我的问题的背景。
我正在撰写新闻应用。
我从Feed中下载了许多新闻项目(项目包含标题,内容,图像等)。然后我会将所有项目存储到CoreData db
。
同时,我可以从数据库中获取项目并在UI上显示它们。
我理解CoreData数据库操作(特别是如果很重)可能会影响和滞后UI,因此我想将所有CoreData操作放入具有最低线程优先级的NSOpeartionQueue
。例如,典型的操作可能是获取订阅源的所有项目并使其为UI准备就绪。
由于CoreData不是线程安全的,并且操作和主线程内的上下文不同,这里有一个问题:如何将这些项提供给主线程,以便主线程可以相应地更新UI?
我有两种可能的解决方案。
第一个解决方案是每个NSManagedObject项目的,我创建一个与任何上下文无关的新项目,然后将所有新闻项目返回给主线程。然后主线程使用这些新项目作为使用非NSManagedObject。该解决方案具有缺点:存储器成本。我必须为所有提取的项目加倍内存。
第二个解决方案是在获取时,在NSOperation中,我不会获取除这些项的objectId之外的任何内容。然后将所有objectId提供给主线程,主线程可以从其自己的上下文中读取所有真正的NSManagedObject项。该解决方案也有一个缺点:UI的可能滞后。由于读取db会在主线程中再次出现,我担心读取会影响UI。
任何人都可以给我一些建议吗?
由于