Realm

May 14, 2016


缺点

  1. 耦合性高
    • 数据模型必须继承RLMObject;对一关系必须是RLMObject,对多关系必须为RLMArray
    • 只支持特定的类型,不支持NSArrayNSDictionary类型。
  2. Runtime带来的弊端
    • 数据模型基于runtime,所以swift模型只能使用类,不能使用结构体,并且对象属性都必须加上dynamic关键词。
    • 底层重写了setter和getter方法,故而不能重写setter和getter方法。除非忽略存储该属性。
    • 应该因为属性存储、读取基于setter和getter,所以从数据库中检索出来的对象,无法访问存储属性的实例变量(ivar的值为空)。
  3. 数据更新不方便
    • 一个模型对象存储至数据库,如果需要修改它,必须先开启数据库。
  4. 线程
    • 对象只能在创建它的线程中使用,不能再其他线程中使用。当然也有线程间传递实例的方法。
  5. 数据迁移
    • 如果数据库中有某个模型的数据,那么该模型新增、修改、删除属性则必须迁移数据。
  6. 多态功能的丢失
    • 多态类之间的转换不允许(例如子类转换成子类,子类转换成父类,父类转换成子类等),因为转换后会导致存储失败。

优点

  1. 关系建立简单

  2. 存储、删除、更新、查询数据相比SQLite简单很多。

  3. 查询的延迟加载特性;效率搞、速度快。

  4. Runtime带来的好处:对象、查询的过程会实时更新。