【问题标题】:Is in-memory persistent store ever fetched if work with MOC tree only如果仅使用 MOC 树,是否会获取内存中的持久存储
【发布时间】:2016-01-26 20:33:56
【问题描述】:

想象一下内存中的持久存储。 假设有一棵 ManagedObjectContext 的树,其根基于此存储。

想象一下,我想为这个 MOC 树创建一个新的“叶子”,并在非主私有叶子的 MOC 队列中对其调用 fetch 请求。

  • 在这种情况下是否会获取内存中的持久存储? (1)
  • 或者对象将仅从 MOC 树中获取,因为它们已经存在? (2)

如果 (1),在任何情况下 (1) 的结果都可能不同于 (2) 的结果(例如,瞬态属性值的丢失)?

如果 (2) 从未发生,这是否意味着对于每个新的此类获取请求,我将丢失瞬态属性的值?

【问题讨论】:

    标签: ios core-data persistence


    【解决方案1】:

    (1) 是的。必须从某个地方获取数据。

    (2) 对象不是“已经存在”。

    这其实很简单。想象一下带有 SQLite 持久存储的普通 Core Data 堆栈。内存存储的唯一区别是 SQLite 存储被内存存储取代。这里的所有都是它的。每当触及 SQLite 存储 时,都会触及内存存储。

    因此,无论持久存储的类型如何,您都将在具有不同数据状态的不同线程上获得完全相同的托管对象上下文的可能场景。

    【讨论】:

    • SQLite 存储和内存存储的区别在于,在应用会话之前(使用之前的 MOC 树),存储中没有存储对象。所以存储在内存中的对象通过了当前的 MOC 树并且可能仍然存在。
    • “MOC 树”是什么意思?上下文是与持久存储不同的概念。对于内存存储,您首先必须创建对象,但这与嵌套上下文无关(大概是您所说的“MOC 树”)。
    • 是的,我知道,我的意思是如果上下文保留对象,内存中持久存储意味着持久存储中的所有当前对象也保留在托管对象上下文中。我的问题是关于瞬态属性值的生命周期 - 我可以确定拥有以上所有内容(在树的根中保留托管对象上下文,并在内存中持久存储),我将有瞬态属性值不会在随后的获取请求之间重置.
    猜你喜欢
    • 2015-03-12
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多