如何调整 Core Data 默认缓存的行为或大小?
Posted
技术标签:
【中文标题】如何调整 Core Data 默认缓存的行为或大小?【英文标题】:How can I tweak the behavior or size of Core Data's default cache? 【发布时间】:2013-11-26 06:05:38 【问题描述】:Core Data 具有内置的缓存机制,并自动将其用于对象获取和与故障相关的操作,但我找不到任何有关修改此默认缓存行为的文档或文章。
有什么方法可以增加或减少 Core Data 的默认缓存?
我正在考虑制作一种NSManagedObject
容器,以减少从持久存储加载数据的开销,但不确定这是不是一个好主意。
【问题讨论】:
【参考方案1】:据我所知,CoreData 没有公开任何通用 API 来控制其缓存行为。 您可以使用以下方法控制给定上下文的对象图的大小:
[context refreshObject:<obj> mergeChanges:NO];
或完全重置上下文:
[context reset];
请参阅here 了解更多信息。This 也可能感兴趣。
您计划构建的容器听起来像 NSPersistentStoreCoordinator
,它保存对象的缓存/快照,或给定 NSManagedObjectContext
中的已注册对象。
在我看来,没有理由为 CoreData “滚动您自己的”缓存,因为这正是您通过使用该框架免费获得的。
您的容器必须保留由上下文(不能在上下文之间共享对象)和对象 ID 键入的对象,因此效果将与调用 [context objectRegisteredForID:<objectID>];
或访问上下文当前现有对象的其他方法相同。
如果您需要在上下文之间传输瞬态属性并且重新计算它们或从头开始获取它们的值的成本很高,则需要一个容器。
【讨论】:
以上是关于如何调整 Core Data 默认缓存的行为或大小?的主要内容,如果未能解决你的问题,请参考以下文章
您将如何最小化或压缩 Core Data sqlite 文件大小?