【问题标题】:Core Data Faults and Memory Warnings核心数据故障和内存警告
【发布时间】:2012-12-07 11:34:47
【问题描述】:

NSManagedObject 是否观察到内存警告并变成故障?我应该在记忆力紧张的情况下做这种事情吗?

是否有关于使用 Core Data 保留内存的指南?

【问题讨论】:

    标签: objective-c cocoa core-data memory-management memory-warning


    【解决方案1】:

    Core Data 旨在为您提供对内存友好的好工具,但其中大部分不是自动的。你还需要做一些工作。

    一般准则有点困难,因为不同的情况可能需要一些非常不同的优化。也就是说,有几点说明:

    • 不特定于 Core Data,但如果您需要操作大量临时对象(即,如果从 Web 服务插入一堆数据),您可能需要使用 @autoreleasepool{...} 来确保这些对象的寿命不会超过它们需要的时间。

    • 关于二进制属性,除非必须,否则不要加载它们。假设您有一个包含照片的人员实体。最好让 'photo' 与另一个属性建立关系——这意味着 Core Data 不必每次都加载二进制数据,并且让您可以更好地控制何时将其放入内存。

      李>
    • 如果您不使用任何撤消功能,请确保您的上下文中有一个 nil 撤消管理器。

    • 1234563 /p>
    • 您可以将获取请求设置为不带回任何或所有 MOs 属性值,如果您只需要使用单个属性或类似的东西,这很有用。你也可以用这个来打自己的脚:如果你最终需要你没有拉下的属性之一,Core Data 必须回到持久存储......所以请确保你注意了。

    这些只是其中的一部分——“核心数据编程指南”还有其他一些内容,我认为这是必读的。总的来说,就像其他任何事情一样,您应该做最少的工作,然后衡量您的使用情况。看看事情进展如何,然后看看优化需要优化的部分。

    玩得开心!

    【讨论】:

    • Core Data 在获取时会加载二进制属性(或任何类型的属性)吗?那些获取的对象不是错误的吗?
    • 当你获取一个 MO 然后它出现故障时,它会同时加载所有属性(但不是关系,因此有机会将东西放入相关的 MO)。
    【解决方案2】:

    您几乎可以假设核心数据将在后台执行所有内存管理优化。

    如果您要处理大量数据,尤其是在表视图中,请查看 NSFetchedResultsController,它可以有效地减少内存占用和访问持久存储的次数。

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多