3

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

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

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

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

4

2 回答 2

1

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

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

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

于 2013-04-30T19:32:55.373 回答
0

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

于 2013-04-30T15:59:33.613 回答