在CoreData中使用NSInMemoryStoreType持久性存储时,只要应用程序处于打开状态,数据是否会保留在内存中,或者这些数据使用的资源是否可以被iOS回收?
鉴于iphone应用程序可以在多任务处理时进行后台处理,并且iOS将回收在后台运行的应用程序的资源。
这是否意味着在某些情况下内存缓存中的持久存储可能会丢失?或许说,如果应用程序已经长时间处于后台状态,并且用户已经访问并使用了许多不同的应用程序。
如果有人能够对这个主题有所了解,那就太棒了。
答案 0 :(得分:1)
核心数据中的某些资源当然可能是NSPurgeableData
个对象,因此如果存在内存压力,它们可能会被暂停。这是一个内部实现细节,应始终对您透明。
作为核心数据之外的具体示例,UIImage
被记录为在内存紧张时删除其部分缓存数据(请参阅UIImage
文档中的图像和内存管理)。核心数据中的内容当然可以做同样的事情。但同样,除了性能方面的考虑外(如果数据可能需要重新计算),对你来说应该永远不重要。
当您的应用程序被终止时,您可能会丢失整个内存数据存储,这可能随时发生。但操作系统并不只是随意删除你的内存。
答案 1 :(得分:0)
我不是100%,但我不得不说,这不会被部分收回,这就是原因。 iOS将分配使用的内存而不是解除分配,除非达到内存警告,并且在那种情况下它只是将所有应用程序关闭或由您处理。进程将在10分钟后暂停,并且该沙盒应用程序保留的所有资源将保留在内存中,除非需要,并且在那种情况下整个应用程序将关闭。因此,如果另一个应用程序请求的内存超过可用内存,那么您的应用程序及其分配的内存将关闭,但不会关闭(您的数据源)。