2013-04-30 78 views
3

在使用NSInMemoryStoreType持久性存储时的CoreData中,只要应用程序处于打开状态,数据是否会保留在内存中,或者是否有可能由iOS回收此数据使用的资源?在CoreData中使用NSInMemoryStoreType时数据是否会丢失?

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

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

如果任何人都可以对这个问题有所了解,那就太棒了。

回答

1

核心数据中的某些资源肯定有可能是NSPurgeableData对象,因此如果存在内存压力,它们可能会在您暂停时丢弃。这是一个内部实现细节,应始终对您透明。

作为核心数据,UIImage以外的具体例进行了说明,以减少一些它的高速缓存数据的存储器时是紧(参照图像和内存管理在UIImage文档)。核心数据中的东西当然可以做同样的事情。但是,除了性能方面的考虑(即可能需要重新计算数据),如果不应该对你重要。

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

+0

感谢您的回答。我猜这里我最关心的是核心数据中的数据是否有可能在背景状态下丢失,或者在内存不足的情况下,可能是使用某种恢复技术的必要条件?虽然我无法在我的谷歌搜索中找到关于此主题的任何内容。这似乎暗示,要么所有的数据丢失,应用程序关闭(这在我的情况是好的,因为数据可以在新的启动时重新加载),或者应用程序在“后台模式”下保存数据使其立即可用供应用程序激活时使用。 – Sabobin 2013-05-01 09:38:45

+1

是的;你将被杀死,或者你的非可清除内存将被单独留下(除非你明确地创建可清除内存,请参阅NSPurgeableData,这意味着所有内容)。系统不会丢掉你的“一些”记忆,只会通过杀死你而抛弃它。 – 2013-05-01 17:44:18

0

我不是100%,但我不得不说不,这不会被部分收回,这就是为什么。 iOS会分配使用的内存,并且不会释放内存,除非出现内存警告,并且在这种情况下,它只会关闭应用程序或由您处理。进程将在10分钟后停止,除非需要,该沙盒应用程序所拥有的所有资源将保留在内存中,并且在此情况下,应用程序整体将关闭。因此,如果另一个应用程序请求的内存超过了可用内存,则您的应用程序和分配的内存将关闭,但零碎不会关闭(您的数据源)。

相关问题