【发布时间】:2011-06-20 00:28:48
【问题描述】:
我的应用程序下面有一个可能非常大的 CoreData 数据存储(可能很容易超过 30MB)。在使用自动迁移 (addPersistentStoreWithType:configuration:URL:options:error:) 时,我开始注意到内存问题,因此我开始研究迁移存储的较小部分的方法,以避免一次迁移所有内容时发生的所有 CoreData 对象堆积。
这在“多次传递”部分的official documentation 中进行了讨论,但是看起来他们建议的方法是按实体类型划分您的迁移,即制作多个映射模型,每个映射模型迁移一个子集来自完整数据模型的实体类型。
唯一的问题是 - 如果一种实体类型是您的数据存储的主要部分怎么办?按照 Apple 推荐的方法,整个实体类型仍将在一次迁移中完成,并且内存问题可能会持续存在。
是否有任何技术可用于实际迁移特定类型的实体子集,以保证在尝试全部迁移时不会耗尽内存?
提前感谢您的帮助。
编辑:在进行更多挖掘之后,我发现 Apple 推荐的将数据库拆分为实体类型实际上只适用于非相关实体(如 discussed here),因此解决问题的可能性更小一个比我最初写这篇文章时想象的真实世界的数据库。
我开始认为实际上通过 NSMigrationManager 完成的 CoreData 迁移现在根本无法扩展,如果您希望能够迁移,基本上不能拥有大于约 20-30MB 的数据库它在当前一代的 iOS 设备上。唯一可行的方法似乎是完全短路所有 NSMigrationManager / NSMappingModel 东西,并在代码中完全自定义迁移。如果真的是这样的话,这似乎是苹果方面的一个巨大疏忽。
【问题讨论】:
标签: iphone core-data memory-management migration