我读过一些教程,建议在实现核心数据时使用两个(或更多) NSManageObjectContexts,以避免阻塞主队列的UI。但是,我有点困惑,因为有些人建议将persistent store coordinator的子上下文设置为mainQueueConcurrencyType类型,然后给它自己的privateQueueConcurrencyType类型的子上下文,而其他人则相反。
我个人认为,使用两个上下文的最佳设置是让persistent store coordinator -> privateQueueConcurrencyType -> mainQueueConcurrencyType,然后只保存到私有上下文,并且只读取主上下文。我对这个设置的好处的理解是,保存到私有上下文将不必经过主上下文,并且阅读主上下文总是包括对私有上下文所做的更改。
我知道许多应用程序都需要一个独特的解决方案,而这种设置可能行不通,但作为一种普遍的良好实践,这是否有意义?
编辑:
有些人指出,随着NSPersistentContainer的引入,这种设置是不必要的。我之所以问这个问题,是因为我继承了一个在工作中使用前置iOS-10设置的大型项目,以及它所经历的问题。我愿意使用NSPersistentContainer重写我们的核心数据栈,但是,除非我能够找到一个关于如何提前为我们的用例设置
的例子,否则我不愿意花时间在它上。
下面是我们大多数主要用例遵循的步骤:
1)用户编辑对象(如。将图片/文本添加到抽象对象)。
2)创建一个对象(同步任务)来封装API调用以更新服务器上已编辑的对象。同步任务保存到队列中的核心数据,以便一个接一个地触发,并且只在internet可用时(因此允许脱机编辑)。
3)编辑后的对象也立即保存到核心数据中,然后返回给用户,以便UI反映其更新。
有了NSPersistentContainer,用performBackgroundTask编写的所有文章和在viewContext上完成的所有查看都满足了我们对上述用例的需求吗?
发布于 2018-08-06 07:39:16
由于iOS10不需要担心这些,所以只需使用NSPersistentContainer为您提供的上下文即可。
https://stackoverflow.com/questions/51660853
复制相似问题