代码之家  ›  专栏  ›  技术社区  ›  psychotik

使用CoreData与内存中使用CoreData的内存占用优势不明显/明显-意见?

  •  1
  • psychotik  · 技术社区  · 16 年前

    我有一个应用程序,目前保存在内存中的所有状态。它以JSON的形式从服务器获取一堆信息,然后将JSON值保存在内存中。每个 JSONObject 我只是用这些数据来填充 UITableView .

    为了更好地处理大量aata,我修改了代码,从服务器获取数据并使用CoreData存储数据。JSON对象可以表示为简单的实体,每个实体有3个 NSString 属性和一个1 int32属性。我创造了一个 NSFetchedResultsController 用作 UITableView NSFetchedResults 控制器有效地管理内存,使其不保留视图中未显示的实体,而将我的所有状态保留在内存中)。 出于讨论的目的,假设我的应用程序清除CoreData存储,并在每次运行时重新获取所有数据。

    当我使用仪器中的VM跟踪器测量驻留内存和虚拟大小的变化时,我注意到这两个值几乎保持相同。事实上,我的应用程序基于核心数据的版本似乎比我将所有内容都完全存储在内存中时占用了更多的内存。

    1 回复  |  直到 11 年前
        1
  •  4
  •   Marcus S. Zarra    16 年前

    核心数据可以使用更多的内存,如您所见,如果有内存的话。然而,核心数据的好处之一是当您进入内存不足的情况时。当这种情况发生时,核心数据将自动尽可能减少自己的内存占用。

    另一个需要考虑的问题是,您是否让核心数据对这些对象产生错误?如果拉入1000个对象并显示其中10个,那么其他990应该处于故障状态,因此占用的内存较少。

    我将遍历核心数据工具,确保您没有意外地实现所有这些对象,并无意中导致内存使用率高于需要的水平。

    听起来像是导入了这些数据,如果没有发现任何错误,那么就没有正确地刷新核心数据。

    假设您在第一次启动时加载此数据(顺便说一句,我不会这样做,我会预加载应用程序并完全避免plist文件),您想调用 -reset 在你的 NSManagedObjectContext 加载完成后,所有未使用的对象都会从内存中清除。然后,当数据返回内存(在使用时)时,它将出现适当的错误。