FMDB Wrapper VS核心数据:哪个更容易使用和维护?

fre*_*cer 7 database iphone core-data ios

FMDB Wrapper VS核心数据:哪个更易于使用和维护?

我很困惑,因为FMDB很老,但仍然有很多开发人员正在使用它,而Core Data是新的,只有3.0及更高版本的sdk支持.

有人说FMDB很容易使用,有些人说核心数据.请帮助我,这样我就可以朝着正确的方向前进.

提前致谢

Ken*_*ner 19

我现在已经在很多项目中大量使用过.

FMDB非常简单,如果你知道SQL它甚至可以很容易使用.但是,随着数据模型的变化,您在应用程序生命周期中所要做的就是:

  1. 更改数据模型,通常使用Base等
  2. 更改SQL代码以反映模型更改
  3. 更改数据对象以反映模型更改
  4. 将代码添加到应用程序中以处理遇到旧数据库的情况.

核心数据为生命周期带来的是:

  1. 使用相同的操作更改数据模型和对象(我假设您使用mogenerator生成数据对象).
  2. 更轻松地显示数据模型.
  3. 通过让您考虑反向关系,鼓励更容易遍历数据模型.
  4. 通常,自动迁移足以通过简单的模型更改进行转换,而无需从头开始重建DB.
  5. Core Data通过NSManagedDocument提供一些iCloud集成.

Core Data为您提供的地狱是:

  1. 删除很糟糕,因为删除对象中的任何属性访问都会引发程序查杀异常.
  2. 后台线程数据访问很糟糕,因为Core Data使得使用多个线程很复杂 - 例如,您不能使用从另一个不同线程中的一个线程中的上下文获取的数据对象.简单地将对象传递给后台线程以便...
  3. 你的数据周围有如此多的魔力,当出现问题时,试图找出要做的事情会非常令人沮丧.
  4. 核心数据看起来非常脆弱,比如被删除的对象抛出异常,使用错误的线程抛出异常,抛出异常的验证,或整个模型在看似简单的变化之后消失都是可能的.

那么我会推荐什么?为了解释关于民主的旧引用,核心数据是最糟糕的数据持久性系统 - 除了所有其他系统.即使Core Data将为您的生活带来痛苦和痛苦的新定义,与FMDB或其他数据持久层相比,它仍然更少工作且更容易使用.

FMDB更直接,如果您可以将更多时间用于更改和数据模型定义,那可能没问题.但一般来说,我会建议人们咬紧牙关并使用核心数据,除非有明确的理由不这样做.

一些快速提示:

  • 在UI启动并且可能访问对象时,切勿删除Core Data中的任何内容.
  • 如果可能的话,将数据库视为一次性的并且能够重建内容,这样如果自动迁移不起作用,用户仍然可以运行该应用程序.
  • 将所有Core Data活动保留在主线程上,并仅作为最后的手段放在后台.
  • 在任何情况下都不要使用Core Data验证,或者取消选中实体中的"可选"框.你宁愿拥有哪一个,一个糟糕的价值进入你的模型可能最终显示有趣或应用程序只是崩溃?
  • 使用mogenerator从模型生成数据对象.其输出直接接回该重新生成可以改变模型和对象类的"上面"的一层对象即开始了空,但可以在其中添加数据对象周围的自定义逻辑并不会改变当下层物体再生时.