【问题标题】:Can data be lost when using NSInMemoryStoreType in CoreData?在 CoreData 中使用 NSInMemoryStoreType 会丢失数据吗?
【发布时间】:2013-04-30 15:43:54
【问题描述】:

在 CoreData 中,当使用 NSInMemoryStoreType 持久存储时,只要应用程序打开,数据是否会一直缓存在内存中,或者这些数据使用的资源是否可以被 iOS 回收?

鉴于 iphone 应用程序在多任务处理时可以在后台运行,并且 iOS 将回收在后台运行的应用程序的资源。

这是否意味着在某些情况下内存缓存中的持久存储可能会丢失?假设应用程序长时间处于后台状态,并且用户已经访问并使用了许多不同的应用程序。

如果有人能对这个主题有所了解,那就太好了。

【问题讨论】:

    标签: iphone ios core-data


    【解决方案1】:

    Core Data 内部的某些资源当然有可能是NSPurgeableData 对象,因此如果存在内存压力,它们可能会在您被挂起时被丢弃。这是一个内部实现细节,应该始终对您透明。

    作为 Core Data 之外的一个具体示例,UIImage 被记录为在内存紧张时删除其一些缓存数据(请参阅UIImage 文档中的图像和内存管理)。 Core Data 中的东西当然有可能做同样的事情。但同样,除了性能方面的考虑(即数据可能需要重新计算)之外,if 对您来说永远都不重要。

    当然,当您的应用程序被终止时,您可能会丢失整个内存中的数据存储,这种情况随时可能发生。但操作系统不会随意删除你的内存。

    【讨论】:

    • 感谢您的回答。我想我在这里最关心的是,核心数据中的数据是否可能在后台状态下丢失,或者在内存不足的情况下,可能需要使用某种类型的恢复技术?虽然我在谷歌搜索中找不到关于这个主题的任何内容。这似乎暗示,要么所有数据都丢失并且应用程序关闭(在我的情况下这很好,因为可以在新启动时重新下载数据),或者应用程序在“后台模式”下保留数据使其立即可用供应用激活时使用。
    • 是的;您将被杀死,或者您的不可清除内存将被单独留下(除非您明确创建可清除内存,请参阅 NSPurgeableData,这意味着一切)。系统不会丢掉你的“部分”记忆,只会杀了你。
    【解决方案2】:

    我不是 100%,但我不得不说不,这不会被部分回收,这就是原因。 iOS 将分配已使用的内存并且不会取消分配,除非达到内存警告,在这种情况下,它只会一起关闭应用程序或由您处理。进程将在 10 分钟后停止,该沙盒应用程序持有的所有资源将保留在内存中,除非需要,否则整个应用程序将关闭。因此,如果另一个应用程序请求的内存比可用内存多,您的应用程序及其分配的内存将关闭,但零碎不会关闭(您的数据源)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2014-03-01
      • 2011-02-12
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多