Core Data 中的可变和不可变托管对象模型有啥区别?

Posted

技术标签:

【中文标题】Core Data 中的可变和不可变托管对象模型有啥区别?【英文标题】:What is the difference between mutable and immutable managed object model in Core Data?Core Data 中的可变和不可变托管对象模型有什么区别? 【发布时间】:2014-03-02 13:33:23 【问题描述】:

在阅读了关于RKManagedObjectStore 的RestKit 文档后,我对createPersistentStoreCoordinator 方法感到困惑,因为该方法的描述中有下一个警告:

**Warning:** Creating the persistent store coordinator will
render the managed object model    immutable. Attempts to 
use functionality that requires  a mutable managed object model 
after the persistent store coordinator has been created
will raise an application error.

我不明白immutable 托管对象模型是什么意思?我在官方Core Data 文档和互联网上都找不到有关此主题的任何信息。有人可以解释一下mutableimmutable 托管对象模型之间的区别吗?为什么创建持久存储协调器会呈现不可变的托管对象模型?什么功能需要可变的托管对象模型?

提前致谢。

【问题讨论】:

【参考方案1】:

您可以在代码中更改 NSManagedObjectModel(例如添加实体和属性),据说它是可变的。但是一旦你将你的对象模型附加到一个持久化存储协调器上,你就不能再改变它了——它已经变得不可变了。

NSManagedObjectModel 的文档中也对此进行了描述:

编辑模型以编程方式管理的对象模型是可编辑的 直到它们被对象图管理器(托管对象)使用 上下文或持久存储协调器)。这允许您创建 或动态修改它们。但是,一旦使用模型,它 不得更改。这是在运行时强制执行的——当对象 manager首先使用模型获取数据,整个模型 变得不可编辑。任何试图改变模型或其任何 之后的子对象会引发异常。如果你 需要修改正在使用的模型,创建副本,修改副本, 然后丢弃旧模型的对象。

【讨论】:

据我所知,通过编辑模型假设 - 更改对象图?

以上是关于Core Data 中的可变和不可变托管对象模型有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Python中的可变对象和不可变对象

python可变数据和不可变数据

python 可变对象和不可变对象

python中的可变数据类型和不可变数据类型

python可变类型和不可变类型

python 深拷贝和浅拷贝之可变和不可变对象总结