加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 过滤Realm与NSPredicate和块之间的差异

发布时间:2020-12-14 04:39:40 所属栏目:百科 来源:网络整理
导读:我想知道Realm的查询性能.鉴于此代码: let result1 = realm.objects(Person.self).filter("age 30 AND ... AND ...")let result2 = realm.objects(Person.self).filter({ $0.age 30 }).filter({$0.name .... }).filter({$0.nickname ...}) result1是使用NSP
我想知道Realm的查询性能.鉴于此代码:

let result1 = realm.objects(Person.self).filter("age < 30 AND ... AND ...")
let result2 = realm.objects(Person.self).filter({ $0.age < 30 }).filter({$0.name .... }).filter({$0.nickname ...})

result1是使用NSPredicate过滤Person对象创建的,而result2是使用Swift集合类型中的过滤器方法过滤的.

这两种过滤方法之间是否存在性能差异?

解决方法

是的,这两种方法之间存在性能差异.

基于NSPredicate的过滤由Realm的查询引擎执行,该引擎直接过滤Realm文件中的数据,而无需创建Person的实例.它可以利用数据库结构的知识来更有效地执行查询(例如,通过使用索引).相反,基于块的过滤必须为Realm中的每个对象创建Person实例,以便将它们传递给块.

还存在其他语义差异,这主要源于两种方法的不同结果类型.基于NSPredicate的过滤返回结果< T>而不是基于块的过滤返回的[T].

结果片剂特征T>是查询结果的实时更新视图.您可以将其中一个提供给视图控制器,并且在应用程序的其他部分执行写入操作后,其内容将更新,从而导致新对象开始匹配谓词.您还可以注册更改通知,以了解新对象何时开始匹配谓词,现有对象是否停止匹配,或者匹配的对象是否以某种方式进行了修改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读