gpt4 book ai didi

iphone - 核心数据内存管理

转载 作者:行者123 更新时间:2023-12-03 18:32:25 24 4
gpt4 key购买 nike

我已经阅读了核心数据文档中的内存管理部分,但我仍然有点困惑。我的应用程序中有一个上下文,并且我有几件事可以从中获取对象。例如,一些获取结果 Controller 、详细 View 和一些其他获取随机对象的代码。一旦对象被完全释放并且其保留计数为0,核心数据是否会自动释放所有对象信息并故障它们?

我在一些获取的结果 Controller 中将大量数据拉入我的上下文中,并且我想确保在用户完成滚动并且可能深入到另一个 View 后,那些在滚动tableview被释放并错误返回到store?

非常感谢,

迈克

最佳答案

Core Data 管理对象生命周期的方式与 Cocoa 其余部分管理对象生命周期的方式相同:只要托管对象上下文或任何其他对象保留所有权,托管对象上下文中的 NSManagedObject 实例就会保留在内存中其中(通过 -[NSObject keep]。默认情况下,NSManagedObjectContext 不保留实例,因此一旦任何其他所有者(即您的 NSFetchedResultsController 实例或程序中的其他实例)释放它们。您可以更改托管对象上下文的默认行为以保留实例,但您很少想要这样做。托管对象上下文必须保留更新的实例直到下一次保存。在保存上下文之前,除了对象实例之外,没有办法保留这些更改。因此,为了最大限度地减少 Core Data 对象的内存使用量,请遵循标准规则:一旦您使用,就释放它们可以。如果您发现上下文内存使用量正在增长(使用 Instruments 的 Core Data 工具来跟踪此情况),则在更新实例时更频繁地保存上下文,从而使它们在上下文中保持事件状态,直到下一次保存,即使您“我们以其他方式释放了它们。

使用NSFetchedResultsController使这一切变得更容易。事实上,NSFetchedResultsController 存在的根本原因是为了让程序员在低内存环境(如 iPhone)中更容易批量获取。

正如 Louis 提到的,NSPercientStoreCoordinator 维护一个行缓存,以将实例数据缓存在内存中,而当对象故障进入托管对象上下文时,不必返回磁盘。然而,这是核心数据实现细节(尽管缓存未命中会影响性能;您可以在 Instruments 中跟踪缓存未命中)。 Core Data 管理缓存,您不必担心它。

关于iphone - 核心数据内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1734554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com