Core Data NSInMemoryStoreType存储是否会将整个图存储在内存中,因此会受到系统内存的严重限制?

时间:2014-03-04 10:12:45

标签: ios macos cocoa-touch cocoa core-data

这似乎是一个显而易见的问题,但我的谷歌搜索没有给我一个明确的回应 - 显然核心数据 NSInMemoryStoreType商店的想法是存储整个图表因此,假设这将对可以在任何时间存储的对象数量施加严格限制似乎是合乎逻辑的 - 这是这种情况吗?或者这个商店是否实现了某种智能磁盘缓存方法来克服这个问题? (如果有人有任何轶事证据证明iOS设备的容量,最好是iPhone 4S以上,那也是受欢迎的。)

2 个答案:

答案 0 :(得分:6)

鉴于有一个备选方案NSBinaryStoreType,其中数据被记录存储在磁盘上,并且给出了名称,我认为可以安全地假设NSInMemoryStoreType严格地在 - 存储器中。

这个Apple doc表示内存存储中存在“无需支持”,但没有明确表示没有使用过。它还指出SQLite“不要求整个对象图驻留在内存中”,暗示某些其他类型的存储执行,但它也不是明确的。

请参阅this thread Bill Bumgarner,大概是 Bill Bumgarner管理iOS运行时团队,讨论如何使用这种类型的商店。

至于限制,有些答案在ios app maximum memory budget,但你应该考虑一下你的程序对用户整体体验的影响。如果您声称拥有所有RAM,则iOS将终止其他进程,导致在来回切换时丢失上下文。 iOS也会在他们切换到Twitter或电子邮件时杀死你的应用程序,如果它正在使用所有的RAM。因此,尽管看起来有多少可用,但要尽量保持在几十兆字节内,除非你的应用真是太神奇了,没有人会切换掉。

答案 1 :(得分:1)

它将所有内容存储在内存中。你是对的,它严重限制了你可以容纳的数据量。由开发人员决定何时适当以及何时不合适。