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