您好我使用CoreData + MagicalRecord 3来管理我的应用中的数据。在那之前一切都工作正常,但后来我意识到在生产中我的应用程序冻得像地狱! 所以我开始调查了解不要停留UI的事实,最好有一个主要的上下文和背景上下文,并在后台保存东西等......
然而,由于我的设置,我不得不质疑。我使用CoreData内存存储系统(为了获得最佳性能)并且我不关心将数据存储在我的应用程序的磁盘上,我很好用一个易失性模型,当应用程序被破坏时它将被销毁被杀或在背景中待了太久。我只是希望能够从任何视图控制器中找到我的数据,而无需耦合。
所以我几乎没有问题: 1)如果我使用1个唯一的上下文,如果我永远不会将它保存到内存存储器会发生什么?例如,如果我MR_createEntity然后我从上下文中检索此实体并更新它,它是否在任何地方更新或我是否必须保存它以便可以更新?换句话说,在你不想永久保存数据的情况下保存内存的兴趣是什么?
2)如果我使用1个我声明为背景的唯一上下文,如果在我的数据完成保存之前显示我的屏幕,屏幕将无法找到并显示我的数据吗?除非我使用NSFetchResultController吗?
答案 0 :(得分:1)
1)出于几个原因,即使使用内存存储也要保存数据。首先,这样您就可以在可能改变主意并持久保存数据的情况下正确使用核心数据。其次,您可能希望访问和处理不同线程/队列上的某些数据。在这种情况下,您必须使用Core Data的线程/队列数据安全机制。商店是Core Data跨线程同步数据的最低级别(旧方式)。如果您使用嵌套上下文来同步数据(新方法),这可能不太重要。但即使使用嵌套上下文,您也需要调用save才能使更改在上下文中合并。当您保存到零商店时,Core Data并不是非常喜欢它。
2)您可以制作和使用自己的上下文来显示数据。 NSFetchedResultsController在收听正确的通知方面做了很多工作,并确保您首先获得所要求的数据的非常具体的更新。 NSFRC并不总是必要的,但肯定是最简单的开始方式。