核心数据子环境

时间:2018-03-14 15:14:25

标签: ios swift core-data

我有两个关于上下文创建的问题。

当我通过singleton访问主要上下文时:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext

每次都是相同的上下文吗?

如果我然后创建这样的子上下文:

let bgContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)

使用Parent作为about主要上下文,是SAME子上下文还是生成一个全新的子上下文。

谢谢!

3 个答案:

答案 0 :(得分:0)

是的,只要它是一个存储的属性,appDelegate.managedObjectContext每次都是同一个对象。

对于你的第二个问题,这是一个新的儿童背景。您可以从here开始阅读Apple的文档。

答案 1 :(得分:0)

  

当我通过单例访问主要上下文时[...]每次都是SAME上下文吗?

没有任何神奇或不透明的东西。您从应用委托类获取托管对象上下文。查看您的AppDelegate.swift,看看它是如何创建该上下文的。这种代码几乎总是意味着你每次都得到同一个代码,但它并不一定是这样。去看看你的代码吧。

  

如果我然后创建这样的子上下文[...]是相同的子上下文,或者它是否生成一个全新的子上下文。

该行代码初始化新的托管对象上下文。这就是NSManagedObjectContext(...)语法所暗示的内容 - 使用特定的初始化方法创建新对象。

答案 2 :(得分:0)

这是一个计算属性。

NSManagedObjectContext(...)

所以在AppDelegate的实施中,你很可能找到这一行:

NSManagedObjectContext

在这种情况下,AppDelegate在其实现中创建了自己的托管对象上下文。 NSManagedObjectContext(...)是一个类,调用NSManagedObjectContext(...)实例化该类中的新对象。因此,如果您在其他地方调用NSManagedObjectContext,则会使用csr作为其蓝图来实例化另一个对象。

我希望这是有道理的。

另外:Read under Parent Store for the answer about child contexts

相关问题