Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与CoreData(iOS)中的轻量级迁移相比,何时使用自定义迁移_Ios_Objective C_Core Data - Fatal编程技术网

与CoreData(iOS)中的轻量级迁移相比,何时使用自定义迁移

与CoreData(iOS)中的轻量级迁移相比,何时使用自定义迁移,ios,objective-c,core-data,Ios,Objective C,Core Data,我正在用核心数据创建一个应用程序。到目前为止,我一直在使用轻量级迁移进行CoreData迁移 我可以知道什么时候应该使用自定义迁移吗 与自定义迁移相比,轻量级迁移有什么缺点吗 我的简短回答如下 光迁移发生在SQLite级别,并自动处理(创建存储时需要设置正确的选项参数)。没有对象加载到内存中,内存需求很低。一般来说,这种类型的迁移(非常)快 相反,大规模移民比第一次移民更困难。执行它意味着将每个实体加载到内存中,并进行转换 它从旧的存储到新的存储,最后写回磁盘。通常它是在后台执行的,因为这可能需

我正在用核心数据创建一个应用程序。到目前为止,我一直在使用轻量级迁移进行CoreData迁移

  • 我可以知道什么时候应该使用自定义迁移吗

  • 与自定义迁移相比,轻量级迁移有什么缺点吗


  • 我的简短回答如下

    光迁移发生在SQLite级别,并自动处理(创建存储时需要设置正确的选项参数)。没有对象加载到内存中,内存需求很低。一般来说,这种类型的迁移(非常)快

    相反,大规模移民比第一次移民更困难。执行它意味着将每个实体加载到内存中,并进行转换 它从旧的存储到新的存储,最后写回磁盘。通常它是在后台执行的,因为这可能需要时间,所以您应该警告用户正在进行某种类型的处理。这需要开发人员执行更多的工作,因为他需要告诉核心数据如何迁移

    这么说,是你的朋友。例如,关于第一种类型的迁移:

    轻量级迁移在迁移的早期阶段尤其方便 应用程序开发,当您可能正在更改托管对象时 经常建模,但您不希望必须不断重新生成测试 数据。您可以迁移现有数据,而无需创建自定义 映射用于创建存储的每个模型版本的模型 需要迁移

    此外,你还可以在谷歌上找到其他参考资料

    编辑1

    总而言之。习俗更复杂。作为开发人员,您有责任指定核心数据需要如何迁移。因此,您需要手动执行此操作。它的速度很慢,通常需要很多时间来理解正在发生的事情。相反,光线是自动且快速的。您只需设置选项,核心数据将为您提供服务。另请参见马库斯·扎拉的评论。特别是,


    此外,在所有情况下,您都应该避免在iOS上进行大量迁移 它最初不是为在iOS设备上运行而设计的,因此会导致更多问题 问题比它值得的多。如果不能使用轻量级迁移 (哪一个是最好的选择)那么做一个导出/导入就更好了 而不是做一次体重过重的迁移


    此外,在所有情况下,您都应该避免在iOS上进行大量迁移,因为它最初不是设计用于在iOS设备上运行的,并且会导致更多的问题。如果您不能使用轻量级迁移(这是最好的选择),那么执行导出/导入要比执行beavy-weight迁移好得多。@MarcusS.Zarra完全同意您的观点。自定义迁移可能很难实现。这需要时间和对核心数据的充分了解。我不知道有多少人能使用它,除了你,很明显;)我不使用它:)@flexaddicted我也学会了使用你在这里提到的链接进行迁移。但是我想知道使用轻量级迁移与定制相比有什么缺点?@MarcusS.Zarra我已经在我的编辑中插入了您的评论。让我知道我是否可以在我的答案之内。我认为进出口建议很有用。干杯