在使用CoreData中的NSInMemoryStoreType时,数据是否会丢失?

3
在CoreData中,使用NSInMemoryStoreType持久性存储时,数据是否会在应用程序开启期间一直保留在内存中,或者这些数据所使用的资源可能会被iOS回收?鉴于iPhone应用程序可以在多任务处理时进入后台,并且iOS将为在后台运行的应用程序回收资源。这是否意味着内存高速缓存中的持久性存储在某些情况下可能会丢失?例如,如果应用程序长时间停留在后台状态,并且用户此后访问和使用了许多不同的应用程序。如果有人能够解释一下这个问题,那就太好了。
2个回答

1
当应用程序内存不足时,Core Data 内的一些资源可能是 NSPurgeableData 对象,因此在您暂停时可能会被删除。这是一个内部实现细节,对您始终应该是透明的。
作为 Core Data 之外的具体示例,UIImage 在内存紧张时记录了一些缓存数据(请参阅 UIImage 文档中的 Images and Memory Management)。Core Data 中的某些内容可能也会这样做。但是,除了性能考虑(即数据可能需要重新计算)外,这对您永远没有影响。
当然,在应用程序被杀死时,您可能会失去整个内存数据存储,这可能随时发生。但操作系统不会随意从您那里删除内存。

感谢您的回答。我最关心的是,在后台状态或低内存情况下,核心数据中的数据是否会丢失,可能需要使用某种恢复技术?尽管我在谷歌搜索中找不到任何关于这个主题的信息。这似乎暗示着,要么所有数据都丢失了并且应用程序关闭(在我的情况下很好,因为可以在新启动时重新下载数据),要么应用程序在“后台模式”下保留数据,使其在应用程序变为活动状态时立即可用。 - Sabobin
1
是的,你要么被杀掉,要么你的不可清除内存将被保留下来(除非你明确地创建了可清除内存,参见NSPurgeableData,这意味着一切)。系统不会丢弃你的“一些”内存,只有通过杀死你才会丢弃它。 - Rob Napier

0

我不是100%确定,但我必须说不行,原因如下。iOS会分配使用的内存,并且除非达到内存警告,否则不会释放内存,而在这种情况下,它将完全关闭应用程序或由您处理。进程将在10分钟后停止,该沙盒应用程序持有的所有资源将保留在内存中,除非需要,在这种情况下,整个应用程序将关闭。因此,如果另一个应用程序请求比可用内存更多的内存,则您的应用程序及其分配的内存将关闭,但位和片段不会关闭(您的数据源)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接