我有两个关于上下文创建的问题。
当我通过singleton访问主要上下文时:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
每次都是相同的上下文吗?
如果我然后创建这样的子上下文:
let bgContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
使用Parent作为about主要上下文,是SAME子上下文还是生成一个全新的子上下文。
谢谢!
答案 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